Swift 按钮旋转三维对象ARKit 2

Swift 按钮旋转三维对象ARKit 2,swift,xcode,rotation,scenekit,arkit,Swift,Xcode,Rotation,Scenekit,Arkit,我有由图像检测触发的3D对象。我添加了按钮,这样用户可以在不同的视图中查看对象,如左、右、上、下等。我的代码有一个缺陷,因为旋转点是从最后一次触摸时设置的。例如,如果按right,它将变为.pi/2,然后按left时它将变为-.pi/2,将其重置回前视图而不是左视图。我怎样才能设置一个原始的前原点,使旋转在每次按下后“重置”,并进入相应的视图?谢谢 @IBAction func leftSideRotate(_ sender: UIButton) { let rotate = SCNAc

我有由图像检测触发的3D对象。我添加了按钮,这样用户可以在不同的视图中查看对象,如左、右、上、下等。我的代码有一个缺陷,因为旋转点是从最后一次触摸时设置的。例如,如果按right,它将变为.pi/2,然后按left时它将变为-.pi/2,将其重置回前视图而不是左视图。我怎样才能设置一个原始的前原点,使旋转在每次按下后“重置”,并进入相应的视图?谢谢

@IBAction func leftSideRotate(_ sender: UIButton) {
    let rotate = SCNAction.rotateBy(x: 0, y: -.pi/2, z: 0, duration: 0.5)
    sender.isEnabled = false
    toggleButton = sender
    activeNode?.runAction(rotate,completionHandler: enableButtonn)
}
func enableButtonn (){
    toggleButton?.isEnabled = true
}

@IBAction func upSole(_ sender: UIButton) {
    let rotate = SCNAction.rotateBy(x: -.pi/2, y: 0, z: 0, duration: 0.5)
    sender.isEnabled = false
    toggleButton = sender
    activeNode?.runAction(rotate,completionHandler: enableButtonnn)
}
func enableButtonnn (){
    toggleButton?.isEnabled = true
}

解决此问题的一种方法是在加载对象后立即在场景中保存对象的原始坐标。然后,使用该方法(而不是rotateBy)实现所需的旋转

例如:

let originalPosition = activeNode?.position

let rotate = SCNAction.rotateTo(x: originalPosition.x, y: (originalPosition.y - .pi/2), z: originalPosition.z, duration: 0.5)

我在“let zPosition=activeNode?.zPosition”行中得到如下错误:“SCNNode”类型的值没有成员“zPosition”;你是说“职位”吗?请检查我的最新答案,如果你还有任何问题,请告诉我。