我无法在其他类swift中扩展虚拟对象

时间:2017-10-20 09:31:46

标签: swift resize nodes scenekit

我试图弄清楚如何在另一个类中扩展虚拟对象 我试图在虚拟对象的扩展中创建一个看起来像这个

的函数
public func setSize1(_ size: Float, node: SCNNode) -> VirtualObject? {
    if let virtualObjectRoot = node as? VirtualObject {
        return virtualObjectRoot

    }
    guard let parent = node.parent else { return nil }
    node.scale = SCNVector3(x: size, y: size, z: size)
    node.position.y = (0)

    return VirtualObject.existingObjectContainingNode(parent)
}

然后我用

来称呼它
@IBAction func sliderValueChanged(_ sender: UISlider) {
        let newValue = Float(sender.value)
        VirtualObject().setSize1(newValue, node: SCNNode)

    }

但每次我这样做,我都会收到如下错误:“无法将'SCNNode.Type'类型的值转换为预期的参数类型'SCNNode'”
什么是编辑节点的最佳方法其他班级?

1 个答案:

答案 0 :(得分:1)

问题在于:

VirtualObject().setSize1(newValue, node: SCNNode)

您没有传递对象,而是传递类型( SCNNode 是类的名称)。您必须改为传递 SCNNode 实例。

修改
要检索要使用的节点:

guard let node = self.childNode(withName: myCachedNodeName, recursively: true) else { return }
VirtualObject().setSize1(newValue, node: node)  

编辑2
鉴于您的需求,我建议使用捏合手势识别器来缩放节点。这是将它添加到场景视图控制器的方法:

let pinch = UIPinchGestureRecognizer(target: self, action: #selector(pinch(:)))
self.view.addGestureRecognizer(pinch)

然后,您必须声明一个方法,只要检测到捏合手势就会执行该方法:

func pinch(gesture:UIPinchGestureRecognizer) {
    let scale = gesture.scale
    if gesture.state == .ended {
        // Use the scale value to scale you SCNNode
        // Alternatively, you could scale your node continuously and not
        // only when the gesture is ended. But in this case, remember to
        // reset the pinch gesture recognizer's scale value
    }
}