我正在使用Core Animation为某些图层设置动画,其中一些图层将用于显示视频。
我听说使用多个图层播放多部电影不是一个好主意(效率低下)。经过一些搜索后,我找到了一种用视频帧创建Open GL纹理的方法。所以我想访问图层属性以使用纹理使用Open GL显示它们(避免为每个使用OpenGL上下文设置多个CAOpenGLLayers)。
我已将CALayer子类化为在setFrame上放置断点:但每次值更改时它都不会中断。如何在动画期间更改CALayer的帧?
PS:我正在使用CARenderer,因为我必须通过混合所有层而不是实时创建帧。
答案 0 :(得分:2)
你的问题似乎归结为:
如何访问动画中间层的帧/变换?
答案是你必须在-presentationLayer
上致电CALayer
。这将返回另一个CALayer
,其属性反映任何正在进行的动画的当前值。但请注意,这只会返回当前显示图层的近似值。我很确定它基本上会根据当前时间重新计算动画的值,而不是使用上次更新屏幕时的任何值。只要您的帧速率很高,它就应该非常接近。
在任何情况下,如果此更改,您将无法收到通知。但是你可以做的是每次需要渲染一个新帧时检查-presentationLayer
。或者,运行CADisplayLink
并在每次触发时检查-presentationLayer
。
但与往常一样,您应该进行性能分析。我不知道计算-presentationLayer
的成本是多少。