如何通过平移手势旋转 SCNSphere/Node
How to rotate a SCNSphere/Node through a pan gesture
所以对于个人项目,我决定在 SceneKit 中制作我自己的相机,基本上复制默认相机控件,除了当用户放大时,会播放响亮的声音,缩小时反之亦然。此外,我还希望当用户平移球时声音会更快。我知道如何编辑声音,但我无法实现平移手势。
这是我的相机代码
let camera = SCNCamera()
//contructing the camera
camera.usesOrthographicProjection = true
camera.orthographicScale = 5
let cameraNode = SCNNode()
cameraNode.camera = camera
cameraNode.position = SCNVector3Make(0, 0, 15)
scene.rootNode.addChildNode(cameraNode)
//adding a pan recognizer (This doesn’t work)
var panRecognizer = UIPanGestureRecognizer(target: self, action: "panGesture:")
sceneView.addGestureRecognizer(panRecognizer)
//adding a pinch recognizer (This works)
var pinchRecognizer = UIPinchGestureRecognizer(target: self, action: "pinchGesture:")
sceneView.addGestureRecognizer(pinchRecognizer)
sceneView.scene = scene
}
super.viewDidAppear(animated)
sceneSetup()
}
那么这是我的平移手势代码,目前无法使用。相反,它会以错误的方向旋转。
func panGesture(sender: UIPanGestureRecognizer) {
//getting the CGpoint at the end of the pan
let translation = sender.translationInView(sender.view!)
//creating a new angle in radians from the x value
var newAngle = (Float)(translation.x)*(Float)(M_PI)/180.0
//current angle is an instance variable so i am adding the newAngle to the newAngle to it
newAngle += currentAngle
//transforming the sphere node
geometryNode.transform = SCNMatrix4MakeRotation(newAngle, Float(translation.x), Float(translation.y),Float(0.0))
//getting the end angle of the swipe put into the instance variable
if(sender.state == UIGestureRecognizerState.Ended) {
currentAngle = newAngle
}
}
我想通了,它一直在工作,只是灯光使它看起来像什么都没有动过。相反,我需要旋转灯光。
所以对于个人项目,我决定在 SceneKit 中制作我自己的相机,基本上复制默认相机控件,除了当用户放大时,会播放响亮的声音,缩小时反之亦然。此外,我还希望当用户平移球时声音会更快。我知道如何编辑声音,但我无法实现平移手势。
这是我的相机代码
let camera = SCNCamera()
//contructing the camera
camera.usesOrthographicProjection = true
camera.orthographicScale = 5
let cameraNode = SCNNode()
cameraNode.camera = camera
cameraNode.position = SCNVector3Make(0, 0, 15)
scene.rootNode.addChildNode(cameraNode)
//adding a pan recognizer (This doesn’t work)
var panRecognizer = UIPanGestureRecognizer(target: self, action: "panGesture:")
sceneView.addGestureRecognizer(panRecognizer)
//adding a pinch recognizer (This works)
var pinchRecognizer = UIPinchGestureRecognizer(target: self, action: "pinchGesture:")
sceneView.addGestureRecognizer(pinchRecognizer)
sceneView.scene = scene
}
super.viewDidAppear(animated)
sceneSetup()
}
那么这是我的平移手势代码,目前无法使用。相反,它会以错误的方向旋转。
func panGesture(sender: UIPanGestureRecognizer) {
//getting the CGpoint at the end of the pan
let translation = sender.translationInView(sender.view!)
//creating a new angle in radians from the x value
var newAngle = (Float)(translation.x)*(Float)(M_PI)/180.0
//current angle is an instance variable so i am adding the newAngle to the newAngle to it
newAngle += currentAngle
//transforming the sphere node
geometryNode.transform = SCNMatrix4MakeRotation(newAngle, Float(translation.x), Float(translation.y),Float(0.0))
//getting the end angle of the swipe put into the instance variable
if(sender.state == UIGestureRecognizerState.Ended) {
currentAngle = newAngle
}
}
我想通了,它一直在工作,只是灯光使它看起来像什么都没有动过。相反,我需要旋转灯光。