MacO 中的逐帧动画
Frame-by-frame animation in MacOs
我正在寻找一种在 MacOs 应用程序中以编程方式逐帧绘制动画的方法(不是关键帧 属性 动画)。我尝试使用 drawLayer:inContext:
委托方法绘制到 CALayer
s,调用 setNeedsDisplay
绘制每一帧,但是我这样做的性能很差。在 Cocoa 中是否有推荐的制作此类动画的方法?
制作完全自定义动画的一个好方法是使用 CADisplayLink
(iOS) 或 CVDisplayLink
(macOS)。 CVDisplayLink
基本上是一个计时器,它在显示刷新时触发。
然后您可以根据您得到的值计算您自己的计时函数 CVDisplayLink
。 API 仍然是 C,所以使用起来有点麻烦,尤其是在 Swift 中,但是一旦你了解它的工作原理,它就像一个魅力。
我在 CVDisplayLink
方面只有很好的经验,尤其是在图层方面。他们真的很高效。我能够以 60fps 的速度为 1000 多个层 CVDisplayLink
制作动画,没有任何问题。
如果您在使用 API 方面需要任何帮助,请随时提出!
选择:
如果你想使用更现代的API,我可以推荐SpriteKit。还有一些不错的动画 APIs。他们表现得非常好。 Apple 使用它本身来绘制更复杂的视图(如 Xcode 中的内存调试器)。
我正在寻找一种在 MacOs 应用程序中以编程方式逐帧绘制动画的方法(不是关键帧 属性 动画)。我尝试使用 drawLayer:inContext:
委托方法绘制到 CALayer
s,调用 setNeedsDisplay
绘制每一帧,但是我这样做的性能很差。在 Cocoa 中是否有推荐的制作此类动画的方法?
制作完全自定义动画的一个好方法是使用 CADisplayLink
(iOS) 或 CVDisplayLink
(macOS)。 CVDisplayLink
基本上是一个计时器,它在显示刷新时触发。
然后您可以根据您得到的值计算您自己的计时函数 CVDisplayLink
。 API 仍然是 C,所以使用起来有点麻烦,尤其是在 Swift 中,但是一旦你了解它的工作原理,它就像一个魅力。
我在 CVDisplayLink
方面只有很好的经验,尤其是在图层方面。他们真的很高效。我能够以 60fps 的速度为 1000 多个层 CVDisplayLink
制作动画,没有任何问题。
如果您在使用 API 方面需要任何帮助,请随时提出!
选择:
如果你想使用更现代的API,我可以推荐SpriteKit。还有一些不错的动画 APIs。他们表现得非常好。 Apple 使用它本身来绘制更复杂的视图(如 Xcode 中的内存调试器)。