我利用CMMotionManager來訪問iOS的陀螺儀數據。我看到有2種方法:iOS-開始接收陀螺儀更新
startGyroUpdates
startGyroUpdatesToQueue:withHandler:
開始接收陀螺儀更新。我們如何區分調用這兩種方法。什麼情況下,他們中的任何一個都可以通話?有沒有其他的意義?
讚賞任何幫助,
我利用CMMotionManager來訪問iOS的陀螺儀數據。我看到有2種方法:iOS-開始接收陀螺儀更新
startGyroUpdates
startGyroUpdatesToQueue:withHandler:
開始接收陀螺儀更新。我們如何區分調用這兩種方法。什麼情況下,他們中的任何一個都可以通話?有沒有其他的意義?
讚賞任何幫助,
隊列來保證所有事件被處理,甚至當你在deviceMotionUpdateInterval設定的更新間隔是生產以更快的速度比你可以實時處理事件。如果你不介意丟失事件,那麼你使用哪兩個並不重要,只要丟棄它們。
蘋果相關的文檔是事件處理指南的Core Motion部分:
對於每個上述的數據運動類型,所述CMMotionManager 類提供用於獲得運動數據,推送方法兩種方法 and a pull approach:
推。應用程序請求更新間隔並實現用於處理運動數據的(特定類型的)塊;然後 開始更新該類型的運動數據,並將該運動隊列以及該塊傳遞到Core Motion 。 Core Motion將每個 更新傳遞給該塊,該塊作爲操作隊列中的任務執行。
拉。應用程序開始更新一種運動數據,並定期採樣運動數據的最新測量結果。
拉做法是對於大多數應用, 尤其是遊戲建議的方法;它通常更高效,並且需要更少的代碼 。推送方法適用於數據收集 應用程序和不能錯過示例 測量的類似應用程序。
這不是你的問題,但我想知道你是否想要原始的x,y,z旋轉或更有用的俯仰,滾轉,偏航。以後用startDeviceMotionUpdatesToQueue:withHandler:代替startGyroUpdatesToQueue:withHandler:。
編輯:查看這個答案湯米的評論。我對代表模式的假設是錯誤的。
我不是特別熟悉CMMotionManager
,但從命名,這裏是我的猜測:
startGyroUpdates
startGyroUpdatesToQueue:withHandler:
第一個是使用委託的前置塊樣式,第二個是基於GCD的封裝版本。
CMMotionManager是在iOS 4中引入的,因此不需要任何委託方法稍微激進一步 - 您可以提供塊或輪詢。所以'startGyroUpdates'適用於那些想要經常檢查狀態的人,而不是那些想要接收實時更新的人。因此,這也是蘋果可能將代表視爲遺留想法的線索。 – Tommy