取消UIView动画块

Sha*_*rky 3 block objective-c 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];
     }];
}
Run Code Online (Sandbox Code Playgroud)

如果在第一个标签应该再次动画之后的下一个5s中有另一个事件,那么我删除了上一个动画[self.view.layer removeAllAnimations](这就是我的想法).但标签刚刚完全消失,接下来的5s标签再次看不见.

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

为什么这不起作用?

亲切的问候,$ h @ rky

vak*_*kio 6

改变这个:

completion:^(BOOL finished) 
 {
     [labelStatus setHidden:YES];
     [labelStatus setAlpha:1.0];
 }];
Run Code Online (Sandbox Code Playgroud)

对此:

completion:^(BOOL finished) 
 {
     if (finished) {
         [labelStatus setHidden:YES];
         [labelStatus setAlpha:1.0];
     }
 }];
Run Code Online (Sandbox Code Playgroud)

原因是当您删除图层的动画时,您将到达此完成块,但这finishedfalse因为您中断了它.此外,订单在这里很重要.也许你期望removeAllAnimations立即调用完成块,但是在你的showStatusOnLabelWithString:方法完成之后它会被调用,所以发生的事情是你正在setHidden:NO紧接着调用setHidden:YES.