基于Pan手势在Y轴上旋转SCNNode
Rotating SCNNode on Y Axis Based on Pan Gesture
我有一个使用平移手势旋转的模型。它工作正常,但不能 360 度旋转。它旋转到 180,然后停止。此外,如果我结束平移手势并再次开始,则位置将被重置。这是我的代码。
@objc func panned(recognizer :UIPanGestureRecognizer) {
var newAngleY :Float = 0.0
if recognizer.state == .changed {
let sceneView = recognizer.view as! ARSCNView
let touchPoint = recognizer.location(in: sceneView)
let translation = recognizer.translation(in: sceneView)
print(translation.x)
let scnHitTestResults = self.sceneView.hitTest(touchPoint, options: nil)
if let hitTestResult = scnHitTestResults.first {
let chairNode = hitTestResult.node
newAngleY = (Float)(translation.x)*(Float)(Double.pi)/180
newAngleY += chairNode.eulerAngles.y/180
chairNode.eulerAngles.y = newAngleY
}
}
else if recognizer.state == .ended {
currentAngleY = newAngleY
}
}
你可以试试这个:
创建 var currentAngleY: Float = 0.0
然后在您的 PanGestureRecognizer 中尝试以下操作:
/// 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 }
}
nodeToRotate
指的是我已经选择的一个SCNNode,但是你应该可以根据自己的需要调整它。
我有一个使用平移手势旋转的模型。它工作正常,但不能 360 度旋转。它旋转到 180,然后停止。此外,如果我结束平移手势并再次开始,则位置将被重置。这是我的代码。
@objc func panned(recognizer :UIPanGestureRecognizer) {
var newAngleY :Float = 0.0
if recognizer.state == .changed {
let sceneView = recognizer.view as! ARSCNView
let touchPoint = recognizer.location(in: sceneView)
let translation = recognizer.translation(in: sceneView)
print(translation.x)
let scnHitTestResults = self.sceneView.hitTest(touchPoint, options: nil)
if let hitTestResult = scnHitTestResults.first {
let chairNode = hitTestResult.node
newAngleY = (Float)(translation.x)*(Float)(Double.pi)/180
newAngleY += chairNode.eulerAngles.y/180
chairNode.eulerAngles.y = newAngleY
}
}
else if recognizer.state == .ended {
currentAngleY = newAngleY
}
}
你可以试试这个:
创建 var currentAngleY: Float = 0.0
然后在您的 PanGestureRecognizer 中尝试以下操作:
/// 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 }
}
nodeToRotate
指的是我已经选择的一个SCNNode,但是你应该可以根据自己的需要调整它。