我尝试编写与画布动画相关的简单内容。我的目标是在NSView上手动创建一些动画(例如连续旋转的矩形,不允许在状态转换中使用核心动画框架(。
我的方法是:
- 获取当前
CGContext
- 清晰的上下文并根据时间绘制一些带有旋转角度的路径
- 计划计时器以强制 NSView 重绘(通过每 1/30 秒调用一次
.display()
问题是我不太确定这是正确的方法,因为它会在 CPU 上产生太多开销。我想知道是否有其他正确的方法可以达到相同的结果?
找到了一些有关needsDisplay
和setNeedsDisplay
的信息来安排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处理所有更新,并完全按照我需要的方式进行