2012-04-27 15 views
1

私のアプリケーションでは、無限ループするいくつかのCAAnimationsがあります(animation.repeatCount = HUGE_VALF)。現在のサイクルが終了した後、ループされたCAAnimationを停止する

私がやりたいことは、現在のサイクルが終了した後でそれらのアニメーションを削除することです。 -[CALayer removeAnimationForKey:]は、レイヤーを通常の位置にジャンプさせます。これは避けたいものです。

になります。レイヤーのプレゼンテーションレイヤーの現在のトランスフォームを取得して(私は回転をしています)、アニメーションを終了する時間を計算し、アニメーションを削除し、repeatCountしかし、それは不必要に複雑に思われ、私はこれを行うより簡単な方法が必要であると感じています。

だから、どのような提案ですか?

答えて

2

完了ブロックがアニメーションを再度呼び出すアニメーションを、フラグに基づいて使用する方法はありますか?アニメーションシーケンスを停止したい場合は、フラグをfalseに設定します。完了ブロックは、繰り返しフラグが偽であることを知り、最後のサイクルの終わりに停止する。

アニメーションをコミットした後、変換を最終値に変更する必要があります。ビューのアニメーションを行っている場合、変換を最終値に設定するだけです。これにより、アニメーションが削除されると、終了状態にとどまります。

レイヤートランスフォームを使用している場合は、トランスフォームを設定するコードを[CATransaction setDisableActions:YES]を使用してCATransactionBegin /の最終状態にする必要があります。これにより、変更は暗黙的にアニメーション化されません。

+0

私はこのことを考えていませんでしたが、私はこのアニメーションのいくつかのビューを持っており、それらを個別に開始/停止する必要があるので、いくつかのハッカーを必要とすると思います。明日の暗黙のアニメーションをどこでも得ることができます – Ahti

関連する問題