Поворот SCNNode
- довольно простая задача.
Вы должны начать с создания переменной для хранения угла поворота вокруг оси YA или любого другого, для которого вы хотите выполнить вращение, например:
var currentAngleY: Float = 0.0
Вам также понадобится какой-то способ обнаружить узел, который вы хотите повернуть, который в этом примере мы назовем currentNode, например:
var currentNode: SCNNode!
В этом примере я просто буду вращаться вокруг оси YAXIS.
Если вы хотите использовать UIPanGestureRecognizer
, вы можете сделать это так:
/// Rotates An Object On It's YAxis
///
/// - Parameter gesture: UIPanGestureRecognizer
@objc func rotateObject(_ gesture: UIPanGestureRecognizer) {
guard let nodeToRotate = currentNode else { return }
let translation = gesture.translation(in: gesture.view!)
var newAngleY = (Float)(translation.x)*(Float)(Double.pi)/180.0
newAngleY += currentAngleY
nodeToRotate.eulerAngles.y = newAngleY
if(gesture.state == .ended) { currentAngleY = newAngleY }
print(nodeToRotate.eulerAngles)
}
В качестве альтернативы, если вы хотите использовать UIRotationGesture
, вы можете сделать что-то вроде этого:
/// Rotates An SCNNode Around It's YAxis
///
/// - Parameter gesture: UIRotationGestureRecognizer
@objc func rotateNode(_ gesture: UIRotationGestureRecognizer){
//1. Get The Current Rotation From The Gesture
let rotation = Float(gesture.rotation)
//2. If The Gesture State Has Changed Set The Nodes EulerAngles.y
if gesture.state == .changed{
currentNode.eulerAngles.y = currentAngleY + rotation
}
//3. If The Gesture Has Ended Store The Last Angle Of The Cube
if(gesture.state == .ended) {
currentAngleY = currentNode.eulerAngles.y
}
}
Надеюсь, это поможет ...