【发布时间】:2018-07-17 19:34:57
【问题描述】:
我正在使用平移手势来旋转我的 SceneKit 场景中的一个节点。我目前拥有的代码完美地旋转了节点。这是我用来旋转节点的代码:
var previousRotation:Float = 0
@objc func panGestureRecognized(gesture: UIPanGestureRecognizer) {
if gesture.numberOfTouches == 2 {
let view = self.view as! SCNView
let node = view.scene!.rootNode.childNode(withName: "Node", recursively: false)
let translation = gesture.translation(in: view)
var newAngle = Float(translation.x) * Float(Double.pi) / 180.0
newAngle += previousRotation
switch gesture.state {
case .began:
newAngle += previousRotation
break
case .changed:
node!.rotation = SCNVector4(x: 0, y: Float(translation.y), z: 0, w: newAngle)
break
case .ended:
newAngle += previousRotation
break
default: break
}
}
}
问题是,当您抬起手指并再次开始旋转时,旋转会“重置”。我需要它来“保持”它的旋转,所以当您再次开始平移时,它只会从上次旋转停止的位置继续。
【问题讨论】:
-
此代码从不设置
previousRotation变量。在.ended的情况下不应该是previousRotation = newAngle吗? -
我想通了,但现在它有另一个问题。当您旋转时,然后停止并旋转另一个方向,当您到达某个点(旋转该方向)时,旋转将停止然后反转并开始向另一个方向旋转,即使您仍在旋转同一方向。跨度>
标签: ios swift rotation scenekit