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.0360.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的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 列标题为单列,第二列为值 [重复]

标题为复选框的分组框

SKProduct 中的本地化标题为零

dedecms添加文章时提示标题为空或者无法保存标题

测试方法抛出异常:找不到标题为计算器的窗口

react-navigation 更新到 v2 后,标题为空