KVO在SCNNode上绑定CGFloat

时间:2019-01-11 10:58:01

标签: swift binding scenekit key-value-observing cgfloat

我正在尝试将节点的位置(在本例中为我的pointOfView节点)绑定到macOS上的文本字段(但我想它在iOS上是相同的)

我可以绑定(通过.bind或情节提要),例如scnView.pointOfView.camera.fieldOfView。但是我无法绑定scnView.pointOfView.position.x

但是,我可以绑定scnView.pointOfView.position。但这对于文本字段似乎没有用。

详细信息

这就是我得到的

field.bind(.value, to: self, withKeyPath: "scnView.pointOfView.position.x", options: nil)
  

2019-01-11 11:54:13.987696 + 0100 Scenekit测试模板[45791:1781975]无法在(NSWindow)上设置(contentViewController)用户定义的检查属性:[valueForUndefinedKey:]:此类不是键值编码-符合密钥x。

这里仅绑定.position

enter image description here

1 个答案:

答案 0 :(得分:0)

您始终可以使用值转换器获取复合值的特定成分。像这样:

field.bind(.value, to: self, withKeyPath: "scnView.pointOfView.position",
    options: [.valueTransformer: PositionXValueTransformer()])

ValueTransformer可能看起来像这样:

class PositionXValueTransformer: ValueTransformer {
    override class func transformedValueClass() -> AnyClass {
        return NSString.self
    }

    override class func allowsReverseTransformation() -> Bool {
        return false
    }

    override func transformedValue(_ value: Any?) -> Any? {
        guard let position = value as? SCNVector3 else {
            return ""
        }

        return "\(position.x)"
    }
}