CMDeviceMotion标题是-1.0

时间:2017-09-18 20:38:42

标签: ios ios11 core-motion

iOS 11中有一个新的heading property CMDeviceMotion。

我正在尝试使用它,但发现它总是-1.0。它应该从0.0360.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。有什么我想念的吗?

1 个答案:

答案 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属性参考中未说明此有用的消息。