Swift 我无法在其他类中缩放虚拟对象

Swift 我无法在其他类中缩放虚拟对象,swift,resize,nodes,scenekit,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 el

我想知道如何在另一个类中缩放虚拟对象
我试图在虚拟对象的扩展中创建一个如下所示的函数

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'”
在其他类中编辑节点的最佳方法是什么?

问题在于:

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
    }
}

你只知道。要缩放哪个节点?它是用户选择的节点。不知道如何在类中获得它用户如何选择它?在选择菜单中,也在其他类中。其他手势用Objective-C进行。但这更好用。非常感谢您抽出时间!它现在工作得很漂亮!