swift - 在 NSView 上创建简单的动画循环
问题描述
我尝试编写与画布动画相关的简单内容。我的目标是在 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)
}
}
解决方案
找到了解决方案:Apple 的SpriteKit处理所有更新并完全满足我的需要
推荐阅读
- javascript - 动态人口后猫头鹰轮播不工作
- mongodb - 如何在Scala中将JSON文件导入mongodb
- python - 通过 SQLAlchemy 组合共同的朋友
- java - Java EE HTTP 状态 500 - 权限被拒绝
- regex - 正则表达式从字符串中提取单词
- sql - 在 SQL Data Tools 2017 SSIS 中预览 Oracle 表时出错
- mysql - 无法使用正确的凭据登录到 mysql docker 容器
- javascript - composeObject 函数可以满足不同数量的参数?
- json - 如何在json4s中提取List和Map
- c++ - C++ struct char 数组初始化