如何绘制UIScrollView的“反弹”区域?

问题描述:

我有一个自定义绘制的视图,包含在水平滚动的UIScrollView中。该视图使用水平延伸的线条和一些不同的背景颜色绘制背景。当我滚动到最左边,使滚动视图“反弹”时,我看到灰色的背景色。我想要做的是在该区域绘制更多的背景线条和颜色,以便看起来像视图一直持续下去,但我无法弄清楚如何做到这一点。我已经尝试将所有视图的clipsToBounds设置为NO,并在视图外的区域中绘制,但这似乎不起作用。我如何在这方面画画?如何绘制UIScrollView的“反弹”区域?

+0

您是否尝试过创建自己的滚动视图(子类的UIScrollView)和实施的drawRect:?将这与原始绘图实现结合起来可能会非常棘手,但这是我首先尝试的方式。 – Till 2011-04-21 16:03:37

我发现在我的情况下,要解决这个,至少。我只是用一个额外的边距增加了滚动视图的大小,然后将滚动视图部分地定位在屏幕之外。

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被“反弹”时,实际显示内容视图的其余部分。

这招有效,因为滚动视图是延长关闭屏幕。如果您想使用与未触摸屏幕边缘的滚动视图相同的技巧,则只需在滚动视图顶部放置另一个视图即可隐藏额外空间。

如果您正在绘制的线条drawRect:方法,没有办法吸引他们的观点界限之外。该物业clipsToBounds只影响子视图,因此,从理论上讲,你可以一个子视图添加到您的主视图与延伸到你的观点的权利,提请在子视图线的框架(显示内容的)。

另一种选择是将子视图添加到滚动视图并将其放置在主视图的右侧。然后在这个子视图中画线。滚动视图仍然会弹跳,因为它不关心其中是否还有部分可见的视图,它只查看contentSize属性以决定何时停止滚动。

如果两个选项是合适的,描述越多,你会喜欢什么样的你画什么样的外观线条,以实现细节。