2

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

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

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

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

4

1 回答 1

2

您的问题似乎可以归结为:

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

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

在任何情况下,您都无法在此更改时收到通知。但是您可以做的是检查-presentationLayer每次需要渲染新帧的时间。或者,运行 aCADisplayLink-presentationLayer在每次触发时检查。

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

于 2013-01-22T18:58:06.870 回答