次のようなブロックでビューをアニメーション化しています(フレームを画面の外に移動しています):
[UIView animateWithDuration:0.3 animations:^{
view.frame = CGRectOffset(view.frame, .0f, CGRectGetHeight(view.frame));
} completion:^(BOOL finished) {
// view is removed here
}];
このアニメーションは、ボタンを押してトリガーすると、素晴らしくスムーズに機能します。その後、ビューは削除され、割り当てが解除されます。
これを KVO オブザーバー (UIGestureRecognizer によってトリガーされる値の変更) に入れると、次のようになります。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
// perform animation from above
}
その後、ビューは 0.3 秒後に単純に削除されますが、下方向にはアニメーション化されません。これはすべてメインスレッドで動作していると確信しています。
アニメーションが再生されない理由はありますか?
解決:
アニメーションを実行するメソッドが複数回呼び出され、ビューが非常に高速に下方向にアニメーション化されたため、すぐに消えたかのように見えました。明らかに、これは起こってはなりません。