iOS 11中有一个新的heading property CMDeviceMotion。
我正在尝试使用它,但发现它总是-1.0
。它应该从0.0
到360.0
保持双重度。
我的应用程序面向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
。有什么我想念的吗?
答案 0 :(得分:4)
问题是我需要使用包含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指南指出,如果您对CMAttitudeReferenceFrame选项使用xArbitraryZVertical
(默认)或xArbitraryCorrectedZVertical
,则标题始终为-1。
heading
属性参考中未说明此有用的消息。