MacO 中的逐帧动画

Frame-by-frame animation in MacOs

我正在寻找一种在 MacOs 应用程序中以编程方式逐帧绘制动画的方法(不是关键帧 属性 动画)。我尝试使用 drawLayer:inContext: 委托方法绘制到 CALayers,调用 setNeedsDisplay 绘制每一帧,但是我这样做的性能很差。在 Cocoa 中是否有推荐的制作此类动画的方法?

制作完全自定义动画的一个好方法是使用 CADisplayLink (iOS) 或 CVDisplayLink (macOS)。 CVDisplayLink 基本上是一个计时器,它在显示刷新时触发。

然后您可以根据您得到的值计算您自己的计时函数 CVDisplayLink。 API 仍然是 C,所以使用起来有点麻烦,尤其是在 Swift 中,但是一旦你了解它的工作原理,它就像一个魅力。

我在 CVDisplayLink 方面只有很好的经验,尤其是在图层方面。他们真的很高效。我能够以 60fps 的速度为 1000 多个层 CVDisplayLink 制作动画,没有任何问题。

如果您在使用 API 方面需要任何帮助,请随时提出!

选择:

如果你想使用更现代的API,我可以推荐SpriteKit。还有一些不错的动画 APIs。他们表现得非常好。 Apple 使用它本身来绘制更复杂的视图(如 Xcode 中的内存调试器)。