可以在 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 项目以显示不同的 NSView
和 SCNView
行为:
https://www.dropbox.com/s/qtymzitkqcqhfje/SCN.zip?dl=0
你在对抗框架。
SceneKit 有自己的渲染和动画计时器。连接到那些以更新对象的属性(位置、颜色等)。让 SceneKit 处理绘制调用。
你需要的方法可能在意想不到的地方。查看 SCNSceneRenderer
和 SCNSceneRendererDelegate
协议的文档。 renderer delegate documentation 解释了渲染循环并向您展示了在何处自定义应用的动画和物理效果。
我有两个非常相似的 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 项目以显示不同的 NSView
和 SCNView
行为:
https://www.dropbox.com/s/qtymzitkqcqhfje/SCN.zip?dl=0
你在对抗框架。
SceneKit 有自己的渲染和动画计时器。连接到那些以更新对象的属性(位置、颜色等)。让 SceneKit 处理绘制调用。
你需要的方法可能在意想不到的地方。查看 SCNSceneRenderer
和 SCNSceneRendererDelegate
协议的文档。 renderer delegate documentation 解释了渲染循环并向您展示了在何处自定义应用的动画和物理效果。