【问题标题】:Creating simple animation loop on NSView在 NSView 上创建简单的动画循环
【发布时间】:2019-09-08 13:06:01
【问题描述】:

我尝试编写与画布动画相关的简单内容。我的目标是在 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)
    }
}

【问题讨论】:

    标签: swift cocoa core-graphics nsview


    【解决方案1】:

    找到解决方案:Apple 的 SpriteKit 处理所有更新并完全按照我的需要进行操作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      相关资源
      最近更新 更多