我正在设置一个视图(在屏幕外移动它的框架)的动画,如下所示:
[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秒后删除视图,但不向下动画。我确信这一切都在主线程上运行。
为什么没有播放动画?
SOLUTION:
多次调用执行动画的方法,使视图快速向下动画,使其看起来好像立即消失。显然,这一定不会发生。
答案 0 :(得分:1)
UIGestureRecognizer
的目标 - 动作机制与UIControl
(UIButton
)之间存在细微差别:UIControl
在检测到时立即执行操作触摸事件,UIGestureRecognizer
计划下一次运行循环的操作。
虽然这并不能解释丢失的动画,但它仍然有助于理解正在发生的事情。通常,UIView动画在从手势识别器的动作触发时起作用。