我正在尝试使用CoreMotion从我的iPhone 6获取磁场数据。
使用以下代码,我可以轻松访问原始数据:
if available {
motionMangager.magnetometerUpdateInterval = updateInterval
motionMangager.startMagnetometerUpdatesToQueue(queue, withHandler: {
(data, error: NSError!) -> Void in
println("x: \(data.magneticField.x), y: \(data.magneticField.y), z: \(data.magneticField.z)")
})
}
但是:我需要通过使用设备运动实例获取派生数据。
因此,我采取了以下步骤:
if motionMangager.deviceMotionAvailable {
motionMangager.magnetometerUpdateInterval = updateInterval
motionMangager.startDeviceMotionUpdatesUsingReferenceFrame(CMAttitudeReferenceFrameXArbitraryZVertical, toQueue: queue, withHandler: {
(deviceMotion: CMDeviceMotion!, error: NSError!) -> Void in
// If no device-motion data is available, the value of this property is nil.
if let motion = deviceMotion {
println(motion)
var accuracy = motion.magneticField.accuracy
var x = motion.magneticField.field.x
var y = motion.magneticField.field.y
var z = motion.magneticField.field.z
println("accuracy: \(accuracy.value), x: \(x), y: \(y), z: \(z)")
}
else {
println("Device motion is nil.")
}
})
}
这里的问题是:
我一直得到坐标x、y和z的零值。精度也是-1。根据苹果文档,精度为-1意味着“CMMagneticFieldCalibrationAccuracyUncalibrated”,意味着“设备没有磁力计”...但不是!这是一部iPhone 6...
那么我做错了什么?我尝试了所有四个CMAttitudeReferenceFrame。请帮帮我。有什么想法吗?