如果视图消失,uiview animate的完成块从未调用过

时间:2012-01-30 11:47:19

标签: iphone ios uiview uiviewanimation

我发现了一些奇怪的行为。当我开始动画并更改视图(视图不会被解雇!)时,完成处理程序永远不会被调用。

[UIView animateWithDuration:0.1f 
                          delay:0.0f 
                        options:UIViewAnimationCurveEaseOut 
                     animations:^(void){
                         [myView setHidden:YES];
                         myLabel.alpha = 0.0f;
                         someOtherView.frame = CGRectMake(130, bubbleBigRect.origin.y, 61, 65);
                         [button setHidden:YES];
                     } 
                     completion:^(BOOL finished){
                         NSLog(@"Complete %d",finished);
                         [imageVIew setImage:[UIImage imageNamed:@"myPng.png"]];                    
                     }];
}

有没有解决方案?

4 个答案:

答案 0 :(得分:5)

不知道在哪里写它,但我得到了你所拥有的相同的东西,但在我的情况下,有时会调用完成块。可能是一回事。
我发现如果在动画块中没有任何东西是动画的 - 例如,如果你将alpha = 0设置为uiview,alpha已经是0,或者你将内容偏移设置为UIScrollView到相同的内容偏移量(就像我的情况一样) ,没有调用完成块。

答案 1 :(得分:1)

将它放在动画块中,并在YOUR_SELECTOR方法中完成您想要完成的所有操作。你现在可以用你的观点做任何你想做的事情,并且仍然有办法在完成时执行某些事情!

[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(YOUR_SELECTOR)];

答案 2 :(得分:0)

在我的情况下,我动画的视图将其帧设置为(0,-568,320,568),并且在动画之后我忘记将帧更改为其所需位置,即(0,0,320,568),因此未调用完成块。改变动画视图的框架为我完成了这项工作。所以我可以说,例如,视图没有任何显示(因为框架没有设置在可见区域)。可能不会调用完成块。

答案 3 :(得分:-1)

将您的来电从[myView setHidden:YES]阻止移至animations阻止。我想这可能会有所帮助。你仍然可以在completion阻止期间将myView的alpha设置为0(如果你想让它淡出),或者在整个animation呼叫之前将它设置为0,如果你想让它消失的话程。