2012-01-27 74 views
3

在下面的代码示出了包含用于所述用户的状态信息的标签的动画。如果发生事件,标签显示提示,并通过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

回答

6

更改此:

completion:^(BOOL finished) 
{ 
    [labelStatus setHidden:YES]; 
    [labelStatus setAlpha:1.0]; 
}]; 

这样:

completion:^(BOOL finished) 
{ 
    if (finished) { 
     [labelStatus setHidden:YES]; 
     [labelStatus setAlpha:1.0]; 
    } 
}]; 

的原因是您当您删除动画的层达到该完成块,但finishedfalse因为你打断它。另外,这里的顺序很重要。也许你期待removeAllAnimations立即调完成块,而是你的showStatusOnLabelWithString:方法完成后,它会被调用,因此正在发生的事情是,你在呼唤setHidden:NO紧跟setHidden:YES

+0

伟大的工程。了解了有关完成变量^^的新内容 – Sharky 2012-01-27 10:45:25

0

你尝试从标签的层(labelStatus.layer)去除动画?

+0

是的,我没有,但同样的结果-.-我更新了我的问题,增加你的答案。 – Sharky 2012-01-27 09:40:11