在 NSView 上创建简单的动画循环

Creating simple animation loop on NSView

我尝试编写与 canvas 动画相关的简单内容。我的目标是在 NSView 上手动创建一些动画(例如连续旋转矩形,不允许核心动画框架在状态之间转换)。

我的做法是:

  1. 获取当前CGContext
  2. 清除上下文并根据时间绘制一些旋转角度的路径
  3. 安排计时器强制 NSView 重绘(通过每 1/30 秒调用 .display()

问题是我不太确定这是正确的方法,因为它会在 CPU 上产生过多的开销。请问有没有其他正确的方法可以达到同样的效果?

找到了一些关于 needsDisplaysetNeedsDisplay 的信息来安排 draw 调用但是当我这样调用它时它不起作用 "tick" 消息只打印一次并且这意味着 draw 函数只被调用一次

class GraphView: NSView {
    ...
    override func draw(_ dirtyRect: NSRect) {
        print("tick")
        super.draw(dirtyRect)

        let ctx = NSGraphicsContext.current?.cgContext
        self.drawdrawPrimitive(context: ctx!)

        // tried both but none of them works
        self.needsDisplay = true
        self.setNeedsDisplay(dirtyRect)
    }
}

找到解决方案:Apple 的 SpriteKit 处理所有更新并完全满足我的需要