UIScrollView绘制未使用的视图部分

时间:2010-07-01 08:24:10

标签: iphone objective-c cocoa-touch

我有一个带有自定义内容视图的UIScrollView,它使用drawRect来显示其内容。

在我的drawRect方法中,我尊重传递的CGRect参数,只绘制所需的内容。

但是,每次调用drawRect时,它都会传递视图的整个边界,即使它是几千个像素,我担心性能和内存使用情况。有没有办法让UIScrollView限制这个,或者我是否担心过多?

另外,我尝试使用CATiledLayer作为图层,虽然这会纠正传递的矩形,但感觉就像我在滥用这个类。此外,视图仍然保留所有像素,据我所知。 (即使它没有立即吸引其中一些)

2 个答案:

答案 0 :(得分:1)

使用CATiledLayer可能是最好的选择。我熟悉CATiledLayer作为一个概念,但我自己从未使用它,所以我不打算对此说些什么。我可以说,如果你继承UIScrollView并实现

layoutSubviews

只要您使用

实施构建,您应该能够以良好的性能重新绘制免费的子视图
CGRectIntersectsRect()

在子类

的情况下,您可以在其中查看当前可见的rect
[self bounds]

与要绘制的对象的矩形相交。如果没有,您可以选择忽略该对象,或者甚至(如果已经在滚动视图中)将其从superview中删除。如果是,您可以将对象放在superview上。

再次,CATiledLayer是一种更好的解决方案,但如果你觉得你滥用它,试试我描述的方法。

答案 1 :(得分:0)

1.content视图大于scrollview是真的..

2.可能你应该意识到UiScrollViewDelegate的

      scrollViewDidScroll 

计算内容视图的应该重绘的矩形,而不是整个边界。