如果视图消失,UIview Animate 的完成块永远不会调用



我注意到一些奇怪的行为。当我启动动画并更改视图(视图不会关闭!(时,永远不会调用完成处理程序。

[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"]];                    
                     }];
}

有什么解决方案吗?

不知道在哪里

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

把它放在你的动画块中,并将你想做的所有事情都放在YOUR_SELECTOR方法中。您现在可以对视图执行任何操作,并且仍然可以在完成后执行某些操作!

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

在我的例子中,我正在制作动画的视图将其帧设置为 (0,-568,320,568(,并且在动画之后我忘记将帧更改为其所需位置,即 (0,0,320,568(,因此没有调用完成块。更改动画视图的框架为我完成了这项工作。所以我可以说,例如视图是否没有什么可显示的(因为框架没有设置在可见区域(。可能无法调用完成块。

将呼叫移动到[myView setHidden:YES]animations块移动到completion块。我认为这可能会有所帮助。您仍然可以在animation块期间将 myView 的 alpha 设置为 0(如果您希望它淡出(,或者在整个调用之前将 alpha 设置为 0,如果您希望它立即消失,则-[UIView animateWithDuration:delay:options:animations:completion:]

最新更新