[英]iOS: KVO + Animation = No Animation?
我在這樣的塊中為視圖動畫(將其框架移動到屏幕外部):
[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秒后刪除視圖,但不向下移動動畫。 我確定所有這些操作都在主線程上進行。
有什么想法為什么不播放動畫?
解:
多次調用執行動畫的方法,將視圖快速向下動畫,以使其看起來好像立即消失了。 顯然,這一定不能發生。
UIGestureRecognizer
的target-action機制與UIControl
( UIButton
)的機制之間有細微的區別: UIControl
在檢測到觸摸事件后立即提供動作,而UIGestureRecognizer
安排該動作用於下一次運行循環。
盡管這不能解釋丟失的動畫,但仍可能有助於了解發生了什么。 通常,從手勢識別器的動作觸發后,UIView動畫即可正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.