皆さんこんにちは、ちょっとした質問です。
私がUIView
作成したクラスがありAnimatedUIView
ます。init で、次のようにアニメーション化するサブビューを作成します。
- (void)animateView{
[UIView animateWithDuration:4.0
delay:1.0
options: nil
animations:^{
// Animation PART 1
}
completion:^(BOOL completed){
[UIView animateWithDuration:4.0
animations:^{
// Animation PART 2
}
completion:^(BOOL completed){
[self animateView];
}
];
}
];
}
[self animateView]
最初のアニメーションだけを 1 秒遅らせたいので、オプション repeat を使用するのではなく、2 番目の完了ブロックで自分自身を呼び出す必要があります。
すべてが正常に機能し、ビューを割り当てて初期化し、サブビューとして追加すると、必要に応じてアニメーション化されます。
しかし、スーパービューを閉じると、ARC が機能し、animatedView の割り当てを解除すると思いますが、CPU は 100% 使用されます。調査したところ、 への呼び出しにコメントすると[self animateView]
、スーパービューを閉じても CPU が急増しません。
だから私は問題を解決することができました(呼び出しの前に条件を置き、スーパービューを閉じる前にブール値を変更することによってkeepAnimating = NO
)、なぜそれがこれを行うのかを理解したかったのですか?アニメーションを続けようとするのはなぜですか? また、CPU を大量に使用するのはなぜですか? 完了ブロックに NSLog を配置すると、最初は 8 秒ごとに表示されますが、スーパービューを閉じると、NSLog はミリ秒ごとに表示され続けます...
ところで:それはこの質問に関連しています:UIView animation using 90%CPU、実際には答えられませんでした。どうもありがとう!