【发布时间】:2019-09-08 13:06:01
【问题描述】:
我尝试编写与画布动画相关的简单内容。我的目标是在 NSView 上手动创建一些动画(例如连续旋转的矩形,不允许在状态之间转换的核心动画框架)。
我的做法是:
- 获取当前
CGContext - 清除上下文并根据时间绘制一些带有旋转角度的路径
- 安排计时器强制 NSView 重绘(通过调用
.display()每 1/30 秒
问题是我不太确定这是正确的方法,因为它会在 CPU 上产生过多的开销。我想知道是否还有其他正确的方法可以达到相同的结果?
找到了一些关于needsDisplay 和setNeedsDisplay 的信息来安排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)
}
}
【问题讨论】:
标签: swift cocoa core-graphics nsview