我正在开发具有罗盘功能的iOS应用程序。我尝试使用CMMagnetometerData
更新,这些更新会提供未校准但正常的结果。
之后,我试图获得CMDeviceMotion
更新,结果总是给出零磁场,精确度为CMMagneticFieldCalibrationAccuracyUncalibrated
。我唯一的设备是iPad,因此无法测试其他设备。
可能是场为零,因为传感器未校准,但我找不到任何方法来执行校准。
如何解决这个问题?
更新
建议{p> Here使用startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:
,但它对我不起作用。
建议 Here将showsDeviceMovementDisplay
设置为true
。然而它也没有用,校准窗口就不会弹出。
最后,已解决。根据我的观察:
1)使用startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:
referenceFrame
不等于allZeros
或XArbitraryZVertical
。
2)将showsDeviceMovementDisplay
设为true
。
经过精确CMMagneticFieldCalibrationAccuracyUncalibrated
的少量零值更新后,它将正常化。
CODE:
...
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)")
}
}
答案 0 :(得分:10)
最后,根据我自己的观察:
1)使用startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:
referenceFrame
不等于allZeros
或XArbitraryZVertical
。
2)将showsDeviceMovementDisplay
设为true
。
经过精确CMMagneticFieldCalibrationAccuracyUncalibrated
的少量零值更新后,它将正常化。