CMDeviceMotion为磁场返回0值

我正在开发具有指南针function的iOS应用程序。 我试图使用CMMagnetometerData更新,它给出未经校准,但正常的结果。

之后,我试图获得CMDeviceMotion更新,结果表明CMMagneticFieldCalibrationAccuracyUncalibrated精度始终为零磁场。 我唯一的设备是iPad,所以不能在别人身上testing。

由于传感器没有被校准,可能是场是零,但我找不到任何方法来执行校准。

如何解决这个问题?

更新:

这里build议使用startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:但它不适合我。

build议将showsDeviceMovementDisplay设置为true 。 然而,它也没有工作,校准窗口只是没有popup。

最后, 解决 。 根据我的观察:

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

2)将showsDeviceMovementDisplay设置为true

经过精确的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)") } } 

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

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

2)将showsDeviceMovementDisplay设置为true

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