2

Core Animationを使用していくつかのレイヤーをアニメーション化していますが、そのうちのいくつかはビデオの表示に使用されます。

複数のレイヤーを使用して複数の映画を再生するのは良い考えではない(非効率的)と聞きました。いくつか検索した後、ビデオフレームを使用してOpenGLテクスチャを作成する方法を見つけました。そこで、レイヤープロパティにアクセスして、テクスチャを使用してOpen GLで表示したいと思います(それぞれにOpenGLコンテキストを持つ複数のCAOpenGLLayerを使用しないようにします)。

setFrameにブレークポイントを配置するためにCALayerをサブクラス化しましたが、値が変更されるたびにブレークすることはありません。アニメーション中に変化するCALayerのフレームを特定するにはどうすればよいですか?

PS:CARendererを使用しているのは、リアルタイムではなく、すべてのレイヤーをミキシングしてフレームを作成する必要があるためです。

4

1 に答える 1

2

あなたの質問はこれに要約されるようです:

アニメーション中のレイヤーのフレーム/変換にアクセスするにはどうすればよいですか?

答えは、 に電話する必要があるということ-presentationLayerですCALayerCALayerこれは、進行中のアニメーションの現在の値を反映するプロパティを持つ別のものを返します。ただし、これは現在表示されているレイヤーの近似値のみを返すことに注意してください。画面が最後に更新されたときにあった値を使用するのではなく、基本的に現在の時間に基づいてアニメーションの値を再計算すると確信しています。フレームレートが高い限り、かなり近いはずです。

いずれにせよ、これが変更されたときに通知を受け取ることはできません。しかし、できることは-presentationLayer、新しいフレームをレンダリングする必要があるたびに をチェックすることです。または、 a を実行して、その起動ごとにCADisplayLinkを確認します。-presentationLayer

ただし、いつものように、パフォーマンス プロファイリングを行う必要があります。を計算するコストがいくらかはわかりません-presentationLayer

于 2013-01-22T18:58:06.870 に答える