0

CoreAnimation が iPhone シミュレーターで複数のアニメーションを連続して実行するのに問題があります。アプリケーションには、アニメーション化する多くのレイヤーがあります。これらのレイヤーはすべて、アプリケーションの UIView に関連付けられたレイヤーのサブレイヤーです。最初のサブレイヤーの位置を (明示的なアニメーション - CAKeyFrameAnimation を使用して) アニメーション化した後、animationDidStop デリゲート メソッドで次のことを行います。

  1. スーパーレイヤーからレイヤーを削除します
  2. CATransaction を開始して、他の 2 つのサブレイヤーの位置を同時にアニメーション化します。これらのレイヤーも、個々の CAKeyframeAnimations をそれぞれのレイヤーに追加して明示的にアニメーション化します。
  3. 次に、最初のレイヤーを別のコンテンツで再利用し、それをスーパーレイヤーの別の位置に追加します (意図的にアニメーション化されていません)。

アプリケーションを実行すると、最初のアニメーションが発生し、レイヤーが削除され、レイヤーが新しい位置に新しいコンテンツとともに追加されますが、ステップ 2 で 2 つのレイヤーのアニメーションは表示されません。興味深いことに、私はトランザクションでアニメーション化されている 2 つのレイヤーのそれぞれに対して animationDidStop 呼び出しを取得します。これらの呼び出しを取得すると、アニメーションが発生しているように見えますが、アニメーションは画面に表示されません。また、トランザクションを正しく設定していない場合に備えて、トランザクションを削除しようとしましたが、同じ結果が表示されました。

この方法で複数のアニメーションをリンクすることは可能ですか?

洞察や提案は大歓迎です。よろしくお願いします。

4

1 に答える 1

0

私の最初の推測では、animationDidStopのアニメーションを、無効になったレイヤーに追加していると思います。もちろん、コードを投稿しない限り、それはわかりません。

次に、Core Animationのタイミングに関するドキュメントを確認する必要があります。これは、機能的ではありますが、最善の方法ではない可能性があるためです。具体的には、このセクションをご覧ください。

タイミングプロトコルは、beginTimeとtimeOffsetの2つのプロパティを使用して、アニメーションをその継続時間の特定の秒数で開始する手段を提供します。beginTimeは、アニメーションを開始する時間の秒数を指定し、アニメーションのレイヤーのタイムスペースに合わせてスケーリングされます。timeOffsetは追加のオフセットを指定しますが、ローカルアクティブ時間で示されます。両方の値を組み合わせて、最終的な開始オフセットを決定します。

于 2009-11-20T04:22:07.217 に答える