我想通過使用CoreMotion從我的iphone 6中獲取磁場數據。如何使用swift獲取磁力計數據?
我沒有問題用下面的代碼訪問原始數據:
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)")
})
}
BUT:我通過使用設備運動實例需要導出的數據。
所以我做了以下內容:
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。根據Apple文檔,-1的準確性意味着「CMMagneticFieldCalibrationAccuracyUncalibrated」意味着「該設備沒有磁力計」......但是不是!這是一個iPhone 6 ...
所以我做錯了什麼?我嘗試了所有四個CMAttitudeReferenceFrame。請我需要幫助。有任何想法嗎?
設備運動(CMAttitudeReferenceFrameXMagneticNorthZVertical):您是否使用 QuaternionX 0.007901 QuaternionY 0.004146 QuaternionZ 0.000132 QuaternionW 0.999960 UserAccelX 0.000576 UserAccelY -0.000035 UserAccelZ -0.001655 RotationRateX 0.000056 RotationRateY 0.009508 RotationRateZ 0.000458 0.000000 MagneticFieldX 0.000000 MagneticFieldY 0.000000 MagneticFieldZ -1 MagneticFieldAccuracy @ 203585.926003 – iSteffi 2015-02-06 11:52:01
模擬器還是實際設備? – Bill 2015-02-06 12:32:56
設備:iphone 6 – iSteffi 2015-02-06 13:14:31