【发布时间】:2017-03-18 19:27:52
【问题描述】:
我有两个非常相似的 macOS 应用程序。一个应用程序通过 Quartz 调用在 NSView 的子类中渲染 2-D 动画,另一个应用程序使用 SceneKit 几何图形在 SCNView 的子类(本身是 NSView 的子类)中渲染 3-D 动画.在每种情况下,“视图”都由视图控制器拥有,并且该所有权在情节提要中设置。在每种情况下,我都使用一个计时器来每秒弄脏视图,因此它的drawRect 被触发以驱动动画运动。在每种情况下我都使用过:self.view.needsDisplay = true
在 2-D 情况下,drawRect 在视图实例中被调用,而在 3-D 情况下则不被调用(即使对于初始渲染也是如此)。
我很困惑! SCNView 是否抑制对 drawRect 的调用?如果是这样,我该如何解决这个问题?如果没有,我错过了什么巫术秘密?
如果这种行为不是读者所期望的,我将发布一个展示它的示例项目。
我知道 SceneKit 可以利用 Core Animation,但我想在两个应用程序中保持相同的通用计时器机制,因为动画内容本质上是相同的动作,二维中的平面是球形的在 3-D 中,因此使用 SceneKit 渲染是有意义的。
添加了一个 Xcode 项目以显示不同的 NSView 和 SCNView 行为:
https://www.dropbox.com/s/qtymzitkqcqhfje/SCN.zip?dl=0
【问题讨论】: