我正在尝试从Apple Watch 3(WatchOS 5.1)获取Core Motion数据,但是尽管DeviceMotion可用(\^PO([a-zA-Z0-9]{6,11})(T+)(T?)$\
属性为isDeviceMotionAvailable
),但从未触发过该处理程序。解析true
之后,我立即在控制台中收到以下消息:
[陀螺仪]手动将陀螺仪中断校准设置为800
我正在使用以下功能来获取Device Motion更新:
super.willActivate()
我已经在InterfaceController中声明了
func startQueuedUpdates() {
if motion.isDeviceMotionAvailable {
self.motion.deviceMotionUpdateInterval = 1.0 / 100.0
self.motion.showsDeviceMovementDisplay = true
self.motion.startDeviceMotionUpdates(using: .xMagneticNorthZVertical, to: self.queue, withHandler:{
(data, error) in
// Make sure the data is valid before accessing it.
if let validData = data {
print(String(validData.userAcceleration.x))
}
})
}
}
任何人以前都遇到过此消息并设法解决了吗?
注意:我已经检查了let motion = CMMotionManager()
let queue : OperationQueue = OperationQueue.main
属性,它是isGyroAvailable
。
答案 0 :(得分:0)
这里的技巧是使startDeviceMotionUpdates(using: CMAttitudeReferenceFrame
参数与设备的功能匹配。如果没有磁力计,它就不会与磁北有关,即使有磁力计,也不会与真北有关,除非它知道您的位置(即纬度和经度)。如果它没有能力符合您选择的参数,则将调用更新,但数据将为nil
。
如果您以最小的.xArbitraryZVertical
开始,您将 从加速度计获得更新,但是通过{{ 1}}属性...
CMDeviceMotion.attitude