CADisplayLink
サウンドとアニメーションの同期を実行するために使用しています。同期は非常に正確である必要があり、現在 1 で実行CADisplayLink
されているframeInterval
ため、セレクターを十分に呼び出すことができません。
粒度を上げる方法はありますか?(frameInterval
は整数プロパティなので、明らかに 1 を下回ることはできません)
CADisplayLink
サウンドとアニメーションの同期を実行するために使用しています。同期は非常に正確である必要があり、現在 1 で実行CADisplayLink
されているframeInterval
ため、セレクターを十分に呼び出すことができません。
粒度を上げる方法はありますか?(frameInterval
は整数プロパティなので、明らかに 1 を下回ることはできません)
古い質問ですが、それは興味深い点を提起するので、私は 2 セントを差し上げます。
ドキュメントに記載されているように、
A CADisplayLink object is a timer object that allows your application to synchronize its drawing to the refresh rate of the display.
したがって、1 秒あたり 60 回 (LCD 画面の表示速度) よりも頻繁に更新を取得することはできません。アニメーション自体にはリフレッシュ レートはありません。アニメーションは、画面が更新されるたびに表示される連続的な動きを表します。
音声再生の経験はあまりありませんが、CADisplayLink
リフレッシュレートが足りないことに驚いています。1/60 秒は本当にユーザーの耳に違いをもたらすのでしょうか? サウンドの再生に使用している方法が、何らかの遅延を引き起こしているのではないでしょうか?
とにかく、サウンドをアニメーションとより細かく同期させたい場合はNSTimer
、 の代わりに、自分に合った繰り返し間隔で を設定することをお勧めしますCADisplayLink
。
他に必要なものは次のとおりです。
CACurrentMediaTime()
た時点で Core Animation によって使用された時間を返す関数CAAnimation
(プロトコルbeginTime
から取得)CAMediaTiming
beginTime
からのオフセットとして設定CACurrentMediaTime
すると、非常に正確で制御された時間に開始するアニメーションを作成できます。アニメーションをレイヤーに追加するときに 0 (デフォルト) のままにしておくとCACurrentMediaTime
、ランループの最後に自動的に設定され、タイミングの制御が難しくなります。
beginTime
また、ランニングから読み取ってCAAnimation
、開始した正確な時間を知ることもできます。これは、レイヤーに追加した正確な時間ではない場合があります (上記を参照)。