Core Animationを使用して、複数のCALayerのアニメーションをグループ化する方法はありますか?

StackOverflow https://stackoverflow.com/questions/418419

  •  03-07-2019
  •  | 
  •  

質問

「ターンベース」でアニメーションする多くのCALayersがある状況があります。ファッション。これらのCALayerのそれぞれの位置をアニメーション化しますが、それらはまったく同じ期間です。これらのCALayerのすべてがアニメーションを完了すると、新しい「ターン」開始され、再び変化する位置をアニメーション化します。

全体の考え方は、位置間の線形補間と一定の速度で、状態から状態へのターンベースの遷移がリアルタイムのアニメーションのように見えるということです。ただし、これは多くの異なるCALayerで達成するのは困難です。

CAAnimationGroupは、単一のCALayerでアニメーションをグループ化するために使用されます。しかし、私は疑問に思っていました、複数のCALayerで同じ持続時間を持つはずのアニメーションをグループ化する簡単な解決策はありますか?

ケビンバラードの質問への返信を含めるように編集

私の問題はこれにあります。 CALayersごとにアニメーションを作成してから、 NSArray内のもの。個々のアニメーションが終了したというコールバックを取得したら、NSArrayから削除します。空になったら、再びすべてのアニメーションを作成します。

複数のレイヤーがあると、すべてのアニメーションが終了してから新しいアニメーションが開始されるまでに顕著な遅延があります。

これらのアニメーションをすべて1つにグループ化できれば、アニメーション間の遅延なしに、より多くのレイヤーをアニメーション化できると思います。これにより、連続するアニメーションの錯覚を台無しにしないでください。

役に立ちましたか?

解決

1つのメソッド内で複数のCALayerにアニメーションを添付すると、それらはすべて(事実上)同時に開始されます。ボールを落とすパズルゲームでこのアプローチを使用します。アニメーションの最後に、アニメーションの次のステージを、さらにアニメーションが必要なボールにアタッチします。

一度に最大60人のCALayerをアニメーション化しており、アニメーションのステージ間で遅延が発生していませんが、アニメーションを任意の種類の配列にキャッシュしません。オーバーヘッドがあるかどうかはわかりません。

私のアニメーションは比較的単純で、各CALayerにオンザフライで作成および添付されます。私のスプライトは60ピクセルの正方形で、数十個の画像を使用してコンテンツを表します。

場合によっては、異なる開始時間(beginTimeを使用)で作成できる複数のアニメーションがあり、それらをCAAnimationGroupにバンドルしますが、後続のアニメーションを事前計算できない場合があります。

他のヒント

CATransactionでアニメーションをラップすると、CGはメインループの同じ反復中にすべてが実行されるようにします。

[CATransaction begin]; //すべてのアニメーション [CATransaction commit];

3つのアニメーションを3つの異なるレイヤーにすべて同時に追加し、それらのアニメーションの長さが同じである場合、それらすべてが一緒にアニメーション化されると予想されます。どのような動作が見られますか?

cp21yos:メソッドについて詳しく説明できますか?私は似たようなことをしようとしています。これには、一度に複数のレイヤーを複数回アニメーション化することが含まれます。あなたは言いました:"アニメーションの最後に、アニメーションの次のステージを添付します"。説明できますか? animationDidStopイベントに追加のアニメーションを実行するロジックを配置しようとすると、アニメーションのシーケンス全体ではなく、最後のアニメーションのみが発生します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top