ios - 使用 SCNGeometry 进行关键值观察以获取详细程度
问题描述
我正在尝试使用 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")
}
}
解决方案
马特和我一起解决了这个问题,这是我们提出的解决方案:
推荐阅读
- python - 如何获得代币对的总流动性?
- spring-boot - Spring Boot - 2.5.4 - 由于缺少 ServletWebServerFactory bean,无法启动 ServletWebServerApplicationContext
- react-native - 授予 Apple Health Kit 许可后转到下一页
- javascript - 获取失败 - Heroku
- firebase - 颤振错误 Firebase/Firestore- 空值检查运算符用于空值
- solidity - 如何获得从 Solidity 到 Web3 的“真实”块哈希
- c# - 如何从 C# foreach 中删除重复值?
- android - 操作栏颜色总是黑色?
- javascript - 使用 Javascript 从 IE 打印 ActiveX 元素
- c - 使用 MSVC 从 Windows Powershell 编译 C 程序