取消UIView动画块

时间:2012-01-27 08:32:58

标签: objective-c block uiviewanimation

下面的代码显示了一个标签动画,其中包含用户的状态消息。如果事件发生,标签显示提示并且正在通过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];
     }];
}

如果在第一个标签后面的第二个标签应该再次设置动画,那么我会删除上一个动画[self.view.layer removeAllAnimations](这就是我的想法)。 但标签刚刚完全消失,接下来的5s标签再次看不见。

如果我(或用户)等待5s,一切正常。

为什么这不起作用?

亲切的问候, $ H @ RKY

2 个答案:

答案 0 :(得分: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然后立即调用{{ 1}}。

答案 1 :(得分:0)

您是否尝试从标签的图层(labelStatus.layer)中删除动画?