Отмена блока анимации UIView - PullRequest
3 голосов
/ 27 января 2012

Код ниже показывает анимацию метки, которая содержит сообщение о статусе для пользователя. Если событие происходит, ярлык показывает подсказку и медленно исчезает через блок анимации 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 секунд ярлык снова становится невидимым.

Если я (или пользователь) подожду 5 с, все будет работать нормально.

Почему это не работает?

С уважением, $ Ч @ скалистый

Ответы [ 2 ]

6 голосов
/ 27 января 2012

Изменить это:

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.

0 голосов
/ 27 января 2012

Вы пытались удалить анимацию со слоя метки (labelStatus.layer)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...