iOS:KVO +动画=没有动画?

时间:2012-10-02 08:42:39

标签: ios animation key-value-observing

我正在设置一个视图(在屏幕外移动它的框架)的动画,如下所示:

[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:

多次调用执行动画的方法,使视图快速向下动画,使其看起来好像立即消失。显然,这一定不会发生。

1 个答案:

答案 0 :(得分:1)

UIGestureRecognizer的目标 - 动作机制与UIControlUIButton)之间存在细微差别:UIControl在检测到时立即执行操作触摸事件,UIGestureRecognizer计划下一次运行循环的操作。

虽然这并不能解释丢失的动画,但它仍然有助于理解正在发生的事情。通常,UIView动画在从手势识别器的动作触发时起作用。