5

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

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

CAAnimationGroup は、単一の CALayer でアニメーションをグループ化するために使用されます。しかし、同じ期間を持つはずのアニメーションを複数のCALayerでグループ化する簡単な解決策はあるのでしょうか?

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

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

いくつかのレイヤーを使用すると、すべてのアニメーションが終了してから新しいアニメーションが開始されるまでに顕著な遅延が生じます。

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

4

4 に答える 4

5

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

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

私のアニメーションは比較的単純で、その場で作成され、各CALayerに添付されます。私のスプライトは60pxの正方形で、コンテンツを表すために数十の可能な画像を使用しています。

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

于 2009-01-09T02:03:49.657 に答える
2

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

[CATransaction開始]; //すべてのアニメーション[CATransactioncommit];

于 2009-04-22T12:13:23.433 に答える
0

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

于 2009-09-07T23:32:27.927 に答える