iOS のジャイロスコープ データにアクセスするために CMMotionManager を使用します。2つの方法があることがわかります:
startGyroUpdates
startGyroUpdatesToQueue:withHandler:
ジャイロアップデートの受信を開始します。これら 2 つのメソッドの呼び出しをどのように区別できますか。それらのいずれかが呼び出される可能性がある状況は何ですか? どちらか一方に重要性はありますか?
どんな助けでも感謝します、
deviceMotionUpdateIntervalで設定した更新間隔がリアルタイムで処理できる速度よりも速い速度でイベントを生成している場合でも、すべてのイベントが処理されることを保証するためにキューが使用されます。イベントの欠落が気にならない場合は、どちらを使用してもかまいません。破棄してください。
関連する Apple ドキュメントは、イベント処理ガイドのCore Motionセクションです。
上記の各データ モーション タイプに対して、CMMotionManager クラスは、モーション データを取得するための 2 つのアプローチ、プッシュ アプローチとプル アプローチを提供します。
押す。アプリケーションは更新間隔を要求し、モーション データを処理するための (特定のタイプの) ブロックを実装します。次に、そのタイプのモーション データの更新を開始し、オペレーション キューとブロックを Core Motion に渡します。Core Motion は、オペレーション キュー内のタスクとして実行されるブロックに各更新を配信します。
引く。アプリケーションは、モーション データのタイプの更新を開始し、モーション データの最新の測定値を定期的にサンプリングします。
プル アプローチは、ほとんどのアプリケーション、特にゲームで推奨されるアプローチです。一般に、より効率的で、必要なコードが少なくて済みます。プッシュ アプローチは、データ収集アプリケーションや、サンプル測定を見逃すことができない同様のアプリケーションに適しています。
それはあなたの質問ではありませんが、生の x、y、z 回転またはより便利なピッチ、ロール、ヨーが必要なのだろうかと思います。後で使用する場合は、startDeviceMotionUpdatesToQueue:withHandler:の代わりにstartGyroUpdatesToQueue:withHandler:を使用します。
編集:この回答に関するTommyのコメントを参照してください。デリゲート パターンに関する私の仮定は間違っていました。
については特に詳しくありませんCMMotionManagerが、名前から推測すると次のようになります。
startGyroUpdatesstartGyroUpdatesToQueue:withHandler:1 つ目はデリゲートを使用したプレブロック スタイルで、2 つ目は GCD に基づくブロック化されたバージョンです。