2017-09-18 55 views
1

有CMDeviceMotion在iOS的11CMDeviceMotion標題爲-1.0

我試圖使用它,但發現它總是-1.0heading property。它應該保持度數爲0.0360.0

運行iOS 11.

let mmgr = CMMotionManager() 
mmgr.showsDeviceMovementDisplay = true // for calibrating magnetometer, maybe not needed? 
mmgr.deviceMotionUpdateInterval = 0.1 
mmgr.startDeviceMotionUpdates(to: .main, withHandler: { (motionData: CMDeviceMotion?, error: Error?) in 
    if let motion = motionData { 
     print("heading:", motion.heading) // always -1.0 
    } 
}) 

我的應用目標的iOS 11+,我就是一個物理設備上測試(iPhone),我可以讓其他屬性就好了,比如motion.attitude.roll。有什麼我失蹤?

回答

1

的問題是,我需要用不同的方法簽名,其中包括CMAttitudeReferenceFrame選項啓動運動更新:

let mmgr = CMMotionManager() 
mmgr.deviceMotionUpdateInterval = 0.1 
mmgr.startDeviceMotionUpdates(using: .xMagneticNorthZVertical, to: .main, withHandler: { (motionData: CMDeviceMotion?, error: Error?) in 
    if let motion = motionData { 
     print("heading:", motion.heading) // works 
    } 
}) 

What's New in iOS 11指南指出,如果你使用xArbitraryZVertical(默認)或xArbitraryCorrectedZVertical的CMAttitudeReferenceFrame選項,標題將始終爲-1。

heading屬性參考中沒有說明這個有用的消息。

+1

要求的良好總結,謝謝。 – matt

+0

實際上並不需要調用'startDeviceMotionUpdates(using:to:withHandler :)「,所以你的回答不應該指定。只需要運動管理者應該有一個包含術語「北」的參考框架。還有其他方法可以確保。 – matt