CMDeviceMotion返回磁场的0值

Tzo*_*ker 5 objective-c magnetometer ipad ios swift

我正在开发具有罗盘功能的iOS应用程序.我试图使用CMMagnetometerData更新,提供未经校准但正常的结果.

在那之后,我试图得到CMDeviceMotion更新,结果总是给出零磁场的CMMagneticFieldCalibrationAccuracyUncalibrated准确性.我唯一的设备是iPad,因此无法测试其他设备.

可能是场为零,因为传感器未校准,但我找不到任何方法来执行校准.

如何解决?

更新:

这里建议使用startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:,但它并没有为我工作.

这里建议设置showsDeviceMovementDisplaytrue.然而它也没有用,校准窗口就不会弹出.

最后,求助了.根据我的观察:

1)使用startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:referenceFrame不等于allZerosXArbitraryZVertical.

2)设置showsDeviceMovementDisplaytrue.

经过精确的零值更新后,CMMagneticFieldCalibrationAccuracyUncalibrated它将正常化.

码:

...
motionManager.deviceMotionUpdateInterval = 0.05
motionManager.showsDeviceMovementDisplay = true 
motionManager.startDeviceMotionUpdatesUsingReferenceFrame(CMAttitudeReferenceFrame.XArbitraryCorrectedZVertical, toQueue: NSOperationQueue.mainQueue(), withHandler:handleUpdate)
...
private func handleUpdate(data: CMDeviceMotion!, error: NSError!) {
    if data != nil {
        let field = data.magneticField.field
        println("\(field.x), \(field.y), \(field.z)")
    }
}
Run Code Online (Sandbox Code Playgroud)

Tzo*_*ker 10

最后,根据我自己的观察:

1)使用startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:referenceFrame不等于allZerosXArbitraryZVertical.

2)设置showsDeviceMovementDisplaytrue.

经过精确的零值更新后,CMMagneticFieldCalibrationAccuracyUncalibrated它将正常化.

  • 谢谢你回答自己的问题.在我的情况下真的帮助了我! (3认同)