在核心动画中,我如何获得图层框架和旋转?

时间:2013-01-22 10:08:08

标签: cocoa core-animation

我正在使用Core Animation为某些图层设置动画,其中一些图层将用于显示视频。

我听说使用多个图层播放多部电影不是一个好主意(效率低下)。经过一些搜索后,我找到了一种用视频帧创建Open GL纹理的方法。所以我想访问图层属性以使用纹理使用Open GL显示它们(避免为每个使用OpenGL上下文设置多个CAOpenGLLayers)。

我已将CALayer子类化为在setFrame上放置断点:但每次值更改时它都不会中断。如何在动画期间更改CALayer的帧?

PS:我正在使用CARenderer,因为我必须通过混合所有层而不是实时创建帧。

1 个答案:

答案 0 :(得分:2)

你的问题似乎归结为:

  

如何访问动画中间层的帧/变换?

答案是你必须在-presentationLayer上致电CALayer。这将返回另一个CALayer,其属性反映任何正在进行的动画的当前值。但请注意,这只会返回当前显示图层的近似值。我很确定它基本上会根据当前时间重新计算动画的值,而不是使用上次更新屏幕时的任何值。只要您的帧速率很高,它就应该非常接近。

在任何情况下,如果此更改,您将无法收到通知。但是你可以做的是每次需要渲染一个新帧时检查-presentationLayer。或者,运行CADisplayLink并在每次触发时检查-presentationLayer

但与往常一样,您应该进行性能分析。我不知道计算-presentationLayer的成本是多少。