我尝试使用kvo来观察节点的几何形状,因为Scenekit不提供某种回调来让我知道节点的细节级别何时更新。这样做的目的是使我的节点具有空闲动画,并且当细节级别更改为除最详细版本以外的任何内容时,我希望从节点中删除动画,以避免运行不必要的空闲动画。
下面是观察设置。将细节层次添加到几何体的代码在其他地方,但它确实会运行,因为我可以看到随着节点像素半径的变化,几何体也会发生变化。
永远不会调用更改处理程序。相反,如果我观察节点的位置,当我将节点放置在场景中的位置时,会触发更改处理程序。是否有我应该监视的其他属性,或者是否有其他方法来确定某个节点已经更改了正在使用的细节级别,以便我可以从该节点中删除动画?
import SceneKit
class ObservableNode: SCNReferenceNode {
private var geometryObservation: NSKeyValueObservation?
override init?(url referenceURL: URL) {
super.init(url: referenceURL)
self.load()
geometryObservation = observe(
\.geometry,
options: [.old, .new]
) { node, change in
print("geometry did change")
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}发布于 2019-09-10 20:47:09
Matt和我在这个问题上一起工作,这是我们提出的解决方案:
https://stackoverflow.com/questions/57777256
复制相似问题