КВО, связывающий CGFloat на SCNNode - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь привязать положение узла - в данном случае мой узел 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] Не удалось установить (contentViewController) проверенное пользователем определенное свойство для (NSWindow): [valueForUndefinedKey:]: этот класс не является кодировкой значения ключа -совместимый для ключа х.

А вот привязка просто .position

enter image description here

1 Ответ

0 голосов
/ 31 января 2019

Вы всегда можете использовать преобразователь значения, чтобы получить определенный компонент составного значения. Примерно так:

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)"
    }
}
...