簡體   English   中英

如何在UIScrollView的“反彈”區域繪制?

[英]How can I draw in the “bounce” area of a UIScrollView?

我有一個自定義繪制的視圖,我包含在水平滾動的UIScrollView中。 視圖繪制背景,水平延伸的線條和一些不同的背景顏色。 當我滾動到最左側以使滾動視圖“彈跳”時,我看到灰色背景顏色。 我想要做的是在該區域繪制額外的背景線和顏色,以便看起來視圖永遠存在,但我無法弄清楚如何做到這一點。 我已經嘗試將所有視圖的clipsToBounds設置為NO,並在視圖外的區域繪制,但這似乎不起作用。 我怎么能在這個區域畫畫?

我找到了解決方案,至少在我的情況下。 我只是增加了滾動視圖的大小和額外的邊距,然后將滾動視圖部分地放在屏幕上。

    CGFloat scrollViewHeight = 300;
    CGFloat preferredWidthOfContent = 500;
    CGFloat gutterMargin = self.bounds.size.width / 2;
    scrollView.frame = CGRectMake(-1 * gutterMargin, 0, self.bounds.size.width, scrollViewHeight)
    scrollView.contentSize = CGSizeMake(preferredWidthOfContent + 2 * gutterMargin, scrollViewHeight);
    contentView.frame = CGRectMake(0, 0, preferredWidthOfContent + 2 * gutterMargin, scrollViewHeight);

內容視圖必須知道裝訂線邊距寬度,然后根據該位置在正確的位置繪制實際內容。 當scrollView被“退回”時,實際顯示內容視圖的其余部分。

這個技巧有效,因為scrollview正在屏幕上延伸。 如果您想使用與觸摸屏幕邊緣的滾動視圖相同的技巧,則必須在滾動視圖的頂部放置另一個視圖以隱藏額外的空間。

如果你在drawRect:方法中繪制線條,則無法在視圖邊界之外繪制它們。 屬性clipsToBounds僅影響子視圖,因此,理論上,您可以將子視圖添加到主視圖 (顯示內容的視圖 ),其中框架延伸到視圖的右側並在該子視圖中繪制線條。

另一個選項是將子視圖添加到滾動視圖並將其放在主視圖的右側。 然后在此子視圖中繪制線條。 滾動視圖仍然會反彈,因為它不關心是否仍有部分可見的視圖,它只查看contentSize屬性以決定何時停止滾動。

如果這兩個選項都不合適,請更詳細地描述您要繪制的線條類型以及您希望實現的外觀類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM