0

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

每次滚动时是否都试图重绘每个 CALayer 的内容?有没有办法禁用它?有其他事情发生吗?

注意:我在 UIView 中将 clearsContextBeforeDrawing 设置为 NOo,这有所帮助,但仍然比我预期的要慢得多

4

2 回答 2

2

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

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

于 2009-09-01T20:03:11.763 回答
0

needsDisplayOnBoundsChange图层上的属性设置为NO

[layer setNeedsDisplayOnBoundsChange:NO];
于 2009-09-01T17:01:22.427 回答