我正在像这样的块中为视图设置动画(将其框架移动到屏幕外):
[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 秒后被简单地移除,但没有向下动画。我确信所有这些都在主线程上运行。
任何想法为什么不播放动画?
解决方案:
执行动画的方法被多次调用,使视图向下动画得如此之快,以至于它看起来好像立即消失了。显然,这绝不能发生。