我无法在另一个 Class swift 中缩放虚拟对象
I cant scale a Virtual Object in an other Class swift
我想弄清楚如何在另一个 class 中缩放虚拟对象
我试着在虚拟对象的扩展中创建一个函数,看起来像这样
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)
}
但每次我这样做时,我都会收到如下错误:"Cannot convert value of type 'SCNNode.Type' to expected argument type 'SCNNode'"
在另一个 class 中编辑节点的最佳方法是什么?
问题在这里:
VirtualObject().setSize1(newValue, node: SCNNode)
您传递的不是对象,而是类型(SCNNode 是 class 的名称)。您必须改为传递 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
}
}
我想弄清楚如何在另一个 class 中缩放虚拟对象
我试着在虚拟对象的扩展中创建一个函数,看起来像这样
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)
}
但每次我这样做时,我都会收到如下错误:"Cannot convert value of type 'SCNNode.Type' to expected argument type 'SCNNode'"
在另一个 class 中编辑节点的最佳方法是什么?
问题在这里:
VirtualObject().setSize1(newValue, node: SCNNode)
您传递的不是对象,而是类型(SCNNode 是 class 的名称)。您必须改为传递 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
}
}