0

CADisplayLinkサウンドとアニメーションの同期を実行するために使用しています。同期は非常に正確である必要があり、現在 1 で実行CADisplayLinkされているframeIntervalため、セレクターを十分に呼び出すことができません。

粒度を上げる方法はありますか?(frameIntervalは整数プロパティなので、明らかに 1 を下回ることはできません)

4

1 に答える 1

0

古い質問ですが、それは興味深い点を提起するので、私は 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、開始した正確な時間を知ることもできます。これは、レイヤーに追加した正確な時間ではない場合があります (上記を参照)。

于 2013-09-07T12:23:37.547 に答える