“CoreAnimation:表面太大”

时间:2011-11-19 13:14:24

标签: macos cocoa core-animation

我正在创建一个自定义(图层托管)文档视图,该视图包含在滚动视图中。根层有两个相同大小的子层 - 一个用于视图的内容,另一个用于需要悬停在主要内容上的任何内容。我将帧设置为2500x2500并将一些单元格添加到内容层,这很好。在将一个单元格图层的半透明克隆添加到叠加层时,整个视图会短暂清除,并且我得到一条日志消息“核心动画:表面2502x2502太大”。这在添加新图层和事件循环的下一个循环之间发生,所以我猜核心动画渲染新图层时。

我知道图层的内容大小与opengl纹理大小有关,但不认为它的框架很重要。我没有在这些图层上绘制任何内容,也没有设置任何样式属性,并删除了屏幕外的子图层。我真正使用它们是为了处理文档视图的几何。这是CA层的合理使用吗?如果没有,是否有更好的方法来处理基于动画的大型核心文档视图?

修改

我再次遇到这个问题,这是由向大父母添加子图层的隐式动画引起的。因此,除了下面建议的内容之外,还有一个可以检查您是否遇到此问题。

1 个答案:

答案 0 :(得分:1)

我会检查以确保您没有在2500x2500图层上设置任何可能需要屏幕外渲染的属性。 (这会导致图层尝试在屏幕外创建一个全尺寸缓冲区并将其内容渲染到该缓冲区中,而不是直接将内容渲染到屏幕上。)

例如,设置不透明度,masksToBounds,mask,shouldRasterize等可能会导致屏幕外渲染。你可以看看是否使用Core Animation乐器进行了屏幕外渲染。 (有一个复选框可突出显示屏幕外渲染的区域。)