CMDeviceMotion数据访问

时间:2016-10-11 12:20:18

标签: iphone swift accelerometer gyroscope motion

我在访问CMDeviceMotion数据时遇到问题。我有所需的一切,但我的startDeviceMotionUpdates函数似乎被传递(我认为处理程序有问题)。这是我的代码:

let manager = CMMotionManager()
        if manager.isDeviceMotionAvailable {
            manager.startDeviceMotionUpdates()
            manager.deviceMotionUpdateInterval = 0.1
            manager.startDeviceMotionUpdates(to: OperationQueue.current!, withHandler: {
                    (data, error) -> Void in
                    self.digit.text = String (describing: data!.gravity.z)
                    self.digit2.text = String (describing: data!.gravity.y)
                    self.digit3.text = String (describing: data!.gravity.z)
                    })

digit,digit2和digit3是编辑文本字段,我希望将重力数据写入其中。所有东西都在iPhone 6上测试 - deviceMotion是可用的和活跃的。我设法在没有startMotionUpdates函数的情况下访问数据,但我只获得了NIL值。知道什么是错的吗?谢谢!

2 个答案:

答案 0 :(得分:1)

好的,我明白了。 访问Core Motion Swift 3.0 (在我的情况下使用 CMDeviceMotion 类,但也可以 CMGyroData 或<强> CMAccelerometerData ):

bitset.set(0, false);
bitset.set(1, true);
bitset.set(2, true);
bitset.set(3, false);

如果不再需要,请不要忘记停止从Core Motion检索数据

let manager = CMMotionManager()
if manager.isDeviceMotionAvailable {
        manager.deviceMotionUpdateInterval = 0.05 //The lower the interval is, the faster motion data is read 
        manager.startDeviceMotionUpdates(to: OperationQueue.current!, withHandler: {
            (motion: CMDeviceMotion?, Error) -> Void in

            //Do whatever U want with data provided by CMDeviceMotion

            }
        })
    }
    else{
        print("Core Motion access denied")
    }

基本上,我的主要问题是处理程序实现。希望它有所帮助!

答案 1 :(得分:0)

问题在于这一行:

manager.startDeviceMotionUpdates()

剪掉它。当您说:

时,您将在稍后开始更新
manager.startDeviceMotionUpdates(to: //...

弄乱你的是两个