2011-08-29 64 views
0

我利用CMMotionManager來訪問iOS的陀螺儀數據。我看到有2種方法:iOS-開始接收陀螺儀更新

startGyroUpdates 
startGyroUpdatesToQueue:withHandler: 

開始接收陀螺儀更新。我們如何區分調用這兩種方法。什麼情況下,他們中的任何一個都可以通話?有沒有其他的意義?

讚賞任何幫助,

回答

3

隊列來保證所有事件被處理,甚至當你在deviceMotionUpdateInterval設定的更新間隔是生產以更快的速度比你可以實時處理事件。如果你不介意丟失事件,那麼你使用哪兩個並不重要,只要丟棄它們。

蘋果相關的文檔是事件處理指南的Core Motion部分:

對於每個上述的數據運動類型,所述CMMotionManager 類提供用於獲得運動數據,推送方法兩種方法 and a pull approach:

  • 推。應用程序請求更新間隔並實現用於處理運動數據的(特定類型的)塊;然後 開始更新該類型的運動數據,並將該運動隊列以及該塊傳遞到Core Motion 。 Core Motion將每個 更新傳遞給該塊,該塊作爲操作隊列中的任務執行。

  • 拉。應用程序開始更新一種運動數據,並定期採樣運動數據的最新測量結果。

拉做法是對於大多數應用, 尤其是遊戲建議的方法;它通常更高效,並且需要更少的代碼 。推送方法適用於數據收集 應用程序和不能錯過示例 測量的類似應用程序。

這不是你的問題,但我想知道你是否想要原始的x,y,z旋轉或更有用的俯仰,滾轉,偏航。以後用startDeviceMotionUpdatesToQueue:withHandler:代替startGyroUpdatesToQueue:withHandler:

1

編輯:查看這個答案湯米的評論。我對代表模式的假設是錯誤的。

我不是特別熟悉CMMotionManager,但從命名,這裏是我的猜測:

  • startGyroUpdates
    主線程上調用的委託方法推出陀螺儀的更新。
  • startGyroUpdatesToQueue:withHandler:
    通過調用給定隊列上的處理程序塊來提供陀螺儀更新。

第一個是使用委託的前置塊樣式,第二個是基於GCD的封裝版本。

+0

CMMotionManager是在iOS 4中引入的,因此不需要任何委託方法稍微激進一步 - 您可以提供塊或輪詢。所以'startGyroUpdates'適用於那些想要經常檢查狀態的人,而不是那些想要接收實時更新的人。因此,這也是蘋果可能將代表視爲遺留想法的線索。 – Tommy