我注意到一些奇怪的行为。当我启动动画并更改视图(视图不会关闭!(时,永远不会调用完成处理程序。
[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:]
。