移动时禁用重绘CALayer内容(iphone)

时间:2009-09-01 03:27:13

标签: iphone core-animation quartz-graphics calayer

我有一个带有大量CALayers(~1000)的UIView,每个CALayers都有一个小图像作为其内容。这个UIView是一个scrollview的子视图(实际上它是另一个视图的子视图,它是scrollview的子视图)。这开始相对较快(几秒钟)。但是,当我滚动滚动视图时,帧速率非常低。

每次滚动时,它是否都在尝试重绘每个CALayer的内容?有没有办法禁用它?还有别的事吗?

注意:我将clearsContextBeforeDrawing设置为我的UIView,这有点帮助,但它仍然比我预期的要慢很多

2 个答案:

答案 0 :(得分:2)

不应重绘图层,但是它们将使用GPU进行合成。尝试使用Instruments中的Sampler和OpenGL ES仪器来查看您的瓶颈是否在CPU或GPU中。您可以通过点击仪器名称旁边的“i”并选择额外参数(Tiler利用率,渲染器利用率等)来记录OpenGL ES仪器中的额外细节。如果其中一个OpenGL值接近100%,那么它就是阻止你的合成。但是,如果采样器显示了对-drawRect:或类似方法的大量调用,那么您的图层将被重绘(由于某种原因),这可能是问题所在。

此外,您可以使用Core Animation工具为非不透明图层着色,这会降低显示帧率。

答案 1 :(得分:0)

将图层上的needsDisplayOnBoundsChange属性设置为NO

[layer setNeedsDisplayOnBoundsChange:NO];