取消一个UIView的动画块
问题描述:
在下面的代码示出了包含用于所述用户的状态信息的标签的动画。如果发生事件,标签显示提示,并通过uiview动画块缓慢消失。取消一个UIView的动画块
- (void)showStatusOnLabelWithString:(NSString *)statusMessage
{
// [self.view.layer removeAllAnimations]; // not working
[labelStatus.layer removeAllAnimations]; // not working, too
[labelStatus setText:statusMessage];
[labelStatus setHidden:NO];
[labelStatus setAlpha:1.0];
[UIView animateWithDuration:5.0 animations:^
{
[labelStatus setAlpha:0.0];
} completion:^(BOOL finished)
{
[labelStatus setHidden:YES];
[labelStatus setAlpha:1.0];
}];
}
如果在以下5秒后的第一个标签应再次动画另一个事件,所以我删除了以前的动画与[self.view.layer removeAllAnimations]
(这就是我的想法)。 但标签只是完全消失,下一个5秒的标签是不可见的一次。
如果我(或用户)的等待(S)的5S一切工作正常。
为什么不能正常工作?
亲切的问候, $ H @ RKY
答
更改此:
completion:^(BOOL finished)
{
[labelStatus setHidden:YES];
[labelStatus setAlpha:1.0];
}];
这样:
completion:^(BOOL finished)
{
if (finished) {
[labelStatus setHidden:YES];
[labelStatus setAlpha:1.0];
}
}];
的原因是您当您删除动画的层达到该完成块,但finished
会false
因为你打断它。另外,这里的顺序很重要。也许你期待removeAllAnimations
立即调完成块,而是你的showStatusOnLabelWithString:
方法完成后,它会被调用,因此正在发生的事情是,你在呼唤setHidden:NO
紧跟setHidden:YES
。
伟大的工程。了解了有关完成变量^^的新内容 – Sharky 2012-01-27 10:45:25