Swift - 使用motionManager Accelerometer,Gyroscope和Magnetometer移动SceneKit节点,就像iPhone的移动一样

时间:2015-07-01 13:09:13

标签: swift scenekit

我有一个SceneKit SCNBox立方体应该跟随我的iphone的所有动作。因此,如果我的iphone横向旋转90度或360度,立方体也会旋转90度或360度,如果我向前旋转手机,立方体应该像手机一样旋转。

我尝试过使用startDeviceMotionUpdatesUsingReferenceFrame,但它与手机的动作不匹配:(

motionManager.deviceMotionUpdateInterval = 1.0 / 60.0
        motionManager.startDeviceMotionUpdatesUsingReferenceFrame(
            CMAttitudeReferenceFrame.XArbitraryZVertical,
            toQueue: NSOperationQueue.mainQueue(),
            withHandler: { (motion: CMDeviceMotion!, error: NSError!) -> Void in

                let currentAttitude = motion.attitude
                let roll = Float(currentAttitude.roll)
                let pitch = Float(currentAttitude.pitch)
                let yaw = Float(currentAttitude.yaw)

                self.arrRoll.append(roll)
                self.arrPitch.append(pitch)
                self.arrYaw.append(yaw)

                cubeNode.eulerAngles = SCNVector3Make(roll, 0.0, 0.0)
                cubeNode.eulerAngles = SCNVector3Make(0.0, 0.0, pitch)
                cubeNode.eulerAngles = SCNVector3Make(0.0, yaw, 0.0)

        })

1 个答案:

答案 0 :(得分:0)

你的代码片段有点脱离了上下文,但有一点让我感到震惊的是,你(很可能是无意中)覆盖了节点的eulerAngles属性。

为什么你有3个独立的作业(只有最后一个作用有效),而不是:

cubeNode.eulerAngles = SCNVector3Make(roll, yaw, pitch)