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

时间:2016-11-04 20:54:48

标签: macos scenekit drawrect

我有两个非常相似的macOS应用程序。一个应用程序在2-D中呈现动画,使用Quartz调用,在NSView的子类中,另一个应用程序,在SCNView的子类中的3-D动画(本身是{{1}的子类使用SceneKit几何。)在每种情况下,“视图”由视图控制器拥有,并且所有权在故事板中设置。在每种情况下,我都使用计时器来每秒弄脏视图,以便触发NSView来驱动动画移动。在每种情况下,我都使用过:drawRect

在2-D情况下,在视图实例中调用self.view.needsDisplay = true,在3-D情况下调用它(即使是初始渲染)。

我很困惑! drawRect会阻止对SCNView的调用吗?如果是这样,我怎么能绕过这个?如果没有,我错过了什么巫毒秘密?

如果这种行为不是读者所期望的,我将发布展示它的示例项目。

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

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

1 个答案:

答案 0 :(得分:1)

你正在与框架作斗争。

SceneKit有自己的渲染和动画定时器。抓住那些来更新你的对象'属性(位置,颜色等)。让SceneKit处理绘制调用。

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