我在访问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值。知道什么是错的吗?谢谢!
答案 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: //...
弄乱你的是两个。