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

时间:2011-04-21 15:28:32

标签: iphone uiscrollview drawrect

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

2 个答案:

答案 0 :(得分:1)

我找到了解决方案,至少在我的情况下。我只是用额外的边距增加了滚动视图的大小,然后将滚动视图部分地放在屏幕上。

    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正在从屏幕上延伸出来。如果你想在滚动视图没有触及屏幕边缘的情况下使用相同的技巧,则必须在滚动视图的顶部放置另一个视图以隐藏额外的空间。

答案 1 :(得分:0)

如果您在drawRect:方法中绘制线条,则无法在视图边界之外绘制它们。属性clipsToBounds仅影响子视图,因此,理论上,您可以将子视图添加到主视图(显示内容的子视图),其中框架延伸到视图的右侧并在该子视图中绘制线条。

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

如果两个选项都不合适,请更详细地描述您正在绘制的线条类型以及您希望实现的外观类型。