5

私はiOSアプリを作っています。(縮小)アニメーションCALayerによって最終的に削除されるオブジェクトがいくつかあります。アニメーションが完了して呼び出されたら、スーパー ビューからオブジェクトを削除して削除したいと思います。animationDidStop:finishedCALayer

  1. しかし、どうすればCALayerオブジェクト を取得できますanimationDidStop:finishedか? CAanimation-object にはレイヤーへのポインターがある と推測して いましたが、ドキュメントで見つけることができません。
  2. 問題を処理するためのより良い方法はありますか? (実際には、同じレイヤーにいくつかのアニメーション オブジェクトが追加されています。理想的には、最後のアニメーションが完了したときにのみレイヤーを削除したいと考えています)
4

4 に答える 4

1

アニメーションを作成してデリゲートを設定するときは、アニメーションで削除する CALayer を渡すだけです。

すべてのアニメーションを削除するには、次の 2 つのオプションがあります。

  1. 既存のアニメーションについては、CALayer の animationKeys を確認できます。
  2. CAAnimationGroup を使用して、すべてのアニメーションをグループ化できます。
于 2013-07-16T23:20:49.047 に答える
0

この回答が役立つかどうか を確認してください:アニメーションが終了した後にアクションを実行する 完了ハンドラーを介して複数のアニメーションをチェーンし、最後のレイヤーのレイヤーを削除できます。例えば:

[UIView animateWithDuration:1.0 animations:^{
    // do first animation in the sequence
} completion:^(BOOL finished) {
    [UIView animateWithDuration:1.0 animations:^{
        // do second animation in the sequence
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:1.0 animations:^{
            // do third animation in the sequence
        } completion:^(BOOL finished) {
            // remove layer after all are done
        }];
    }];
}];

この方法は少し面倒かもしれませんが、たとえば、これらを独自のメソッド呼び出しにリファクタリングできます。

于 2013-07-16T23:19:47.763 に答える