CMDeviceMotion 标题为 -1.0
Posted
技术标签:
【中文标题】CMDeviceMotion 标题为 -1.0【英文标题】:CMDeviceMotion heading is -1.0 【发布时间】:2017-09-18 20:38:42 【问题描述】:在 ios 11 中有一个新的heading property CMDeviceMotion。
我正在尝试使用它,但发现它总是-1.0
。它应该持有从0.0
到360.0
的Double 学位。
我的应用面向 iOS 11+,我正在运行 iOS 11 的物理设备 (iPhone) 上进行测试。
let mmgr = CMMotionManager()
mmgr.showsDeviceMovementDisplay = true // for calibrating magnetometer, maybe not needed?
mmgr.deviceMotionUpdateInterval = 0.1
mmgr.startDeviceMotionUpdates(to: .main, withHandler: (motionData: CMDeviceMotion?, error: Error?) in
if let motion = motionData
print("heading:", motion.heading) // always -1.0
)
我可以得到其他属性就好了,比如motion.attitude.roll
。我有什么遗漏吗?
【问题讨论】:
【参考方案1】:问题是我需要使用包含CMAttitudeReferenceFrame
选项的不同方法签名来启动运动更新:
let mmgr = CMMotionManager()
mmgr.deviceMotionUpdateInterval = 0.1
mmgr.startDeviceMotionUpdates(using: .xMagneticNorthZVertical, to: .main, withHandler: (motionData: CMDeviceMotion?, error: Error?) in
if let motion = motionData
print("heading:", motion.heading) // works
)
What's New in iOS 11 指南指出,如果您使用 xArbitraryZVertical
(默认)或 xArbitraryCorrectedZVertical
作为 CMAttitudeReferenceFrame 选项,标题将始终为 -1。
heading
属性参考中没有说明这个有用的花絮。
【讨论】:
实际上没有必要致电startDeviceMotionUpdates(using:to:withHandler:)
,因此您的答案不应指定。需要的只是运动管理器应该有一个包含术语North
的参考框架。还有其他方法可以确保这一点。以上是关于CMDeviceMotion 标题为 -1.0的主要内容,如果未能解决你的问题,请参考以下文章