首页 > 解决方案 > 在 NSView 上创建简单的动画循环

问题描述

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

我的做法是:

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

问题是我不太确定这是正确的方法,因为它会在 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)
    }
}

标签: swiftcocoacore-graphicsnsview

解决方案


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


推荐阅读