CMDeviceMotion 数据访问

CMDeviceMotion data access

我在访问 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 值。知道有什么问题吗?谢谢!

好的,我明白了。要在 Swift 3.0 访问 Core Motion(在中使用 CMDeviceMotion class我的情况,但也可以是 CMGyroDataCMAccelerometerData):

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")
    }

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

ovveride func viewWillDisappear(_ animated: Bool) {
manager.stopDeviceMotionUpdates()
}

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

问题出在这一行:

manager.startDeviceMotionUpdates()

别了。稍后您将开始更新,当您说:

manager.startDeviceMotionUpdates(to: //...

让你感到困惑的是两者