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



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

我的方法是:

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

问题是我不太确定这是正确的方法,因为它会在 CPU 上产生太多开销。我想知道是否有其他正确的方法可以达到相同的结果?

找到了一些有关needsDisplaysetNeedsDisplay的信息来安排draw呼叫,但是当我像只打印一次的"勾号"消息一样调用它时它不起作用,这意味着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处理所有更新,并完全按照我需要的方式进行

最新更新