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

1

UIGestureRecognizer的目标动作机制和UIControl( UIButton)机制之间有一个细微的区别:UIControl在检测到触摸事件时立即传递动作,同时UIGestureRecognizer为下一次通过运行循环安排动作。

虽然这并不能解释丢失的动画,但它可能仍然有助于理解发生了什么。一般来说,当手势识别器的动作触发时,UIView 动画会起作用。

于 2012-10-02T10:48:16.313 回答