我正在尝试使用 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")
}
}