1

次のようなブロックでビューをアニメーション化しています(フレームを画面の外に移動しています):

[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 秒後に単純に削除されますが、下方向にはアニメーション化されません。これはすべてメインスレッドで動作していると確信しています。

アニメーションが再生されない理由はありますか?

解決:

アニメーションを実行するメソッドが複数回呼び出され、ビューが非常に高速に下方向にアニメーション化されたため、すぐに消えたかのように見えました。明らかに、これは起こってはなりません。

4

1 に答える 1