可以在 SCNView (macOS) 上触发 drawRect 吗?

can drawRect be triggered on a SCNView (macOS)?

我有两个非常相似的 macOS 应用程序。一个应用程序在 NSView 的子类中使用 Quartz 调用呈现 2-D 动画,另一个应用程序在 SCNView 的子类中呈现 3-D 动画(本身是 NSView) 使用 SceneKit 几何图形。在每种情况下, "view" 都归视图控制器所有,并且该所有权在情节提要中设置。在每种情况下,我都使用计时器每秒弄脏视图,以便触发其 drawRect 来驱动动画运动。在每种情况下我都使用:self.view.needsDisplay = true

在 2-D 情况下,drawRect 在视图实例中被调用,在 3-D 情况下则不是(即使是初始渲染)。

我很纳闷! SCNView 会抑制对 drawRect 的调用吗?如果是这样,我该如何解决这个问题?如果不是,我错过了什么巫术秘密?

如果此行为不是读者所期望的,我将 post 展示它的示例项目。

我知道 SceneKit 可以利用核心动画,但我想在两个应用程序中保持相同的通用计时器机制,因为动画内容本质上是相同的动作,在 2 中是平坦的-D 在 3-D 中是球形的,因此使用 SceneKit 渲染很有意义。

添加了一个 Xcode 项目以显示不同的 NSViewSCNView 行为: https://www.dropbox.com/s/qtymzitkqcqhfje/SCN.zip?dl=0

你在对抗框架。

SceneKit 有自己的渲染和动画计时器。连接到那些以更新对象的属性(位置、颜色等)。让 SceneKit 处理绘制调用。

你需要的方法可能在意想不到的地方。查看 SCNSceneRendererSCNSceneRendererDelegate 协议的文档。 renderer delegate documentation 解释了渲染循环并向您展示了在何处自定义应用的动画和物理效果。