UILabel анимированное исчезновение не работает - PullRequest
2 голосов
/ 21 ноября 2011

Я пытаюсь создать представление о моем приложении, когда UILabels постепенно исчезает.У меня есть две метки.Я хочу, чтобы первый исчез, оставался на экране в течение 4 секунд.Затем вторая метка должна появиться и оставаться на экране в течение 4 секунд.Затем должны исчезнуть обе метки.

У меня есть следующий код, но он ничего не делает, так как он переходит прямо в конечное состояние.У меня есть следующий метод в viewDidAppear ().Что я делаю не так?

-(void) animateLabels
{
    [UIView beginAnimations:@"First Label Display" context:nil];
    [UIView setAnimationDelay:4.0];
    firstLabel.alpha = 1;
    [UIView commitAnimations];


    [UIView beginAnimations:@"Second Label Display" context:nil];
    [UIView setAnimationDelay:6.0];
    secondLabel.alpha = 1;
    [UILabel commitAnimations];

    [UIView beginAnimations:@"Hide Labels" context:nil];
    [UIView setAnimationDelay:10.0];
    secondLabel.alpha = 0;
    firstLabel.alpha=0;
    [UILabel commitAnimations];

}

Ответы [ 2 ]

3 голосов
/ 21 ноября 2011

Используйте блочную анимацию и объедините анимацию Итак, есть 3 шага. label1 fadesIn, Label2 fadesIn, наконец Label3 fadesIn. Я написал код ниже для исчезновения в label1 & label2. Исчезать просто. Я думаю, что вы можете заполнить остальные. Это прямо отсюда ...

Попробуйте это -

[UIView animateWithDuration:1.0 
                      delay:4 
                    options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction
                 animations:^(void) 
 {
     [firstLabel setAlpha:1.0];
 } 
                 completion:^(BOOL finished) 
 {
     if(finished)
     {
         [UIView animateWithDuration:1.0 
                               delay:4.0 
                             options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction
                          animations:^(void) 
          {
              [secondLabel setAlpha:1.0];
          } 
                          completion:^(BOOL finished) 
          {
              if(finished)
              {
                  //put another block her to hide both the labels.
              }
          }];
     }
 }];
1 голос
/ 21 ноября 2011

Я предлагаю переписать это, используя блоки. Сначала animateWithDuration:animations:completion:, а затем вложенный animateWithDuration:delay:options:animations:completion:. Это гораздо более гибко, и в наши дни нет необходимости работать на системах с предварительной блокировкой.

Кроме того, ваша первая анимация в том виде, в котором она написана, не сработает в течение 4 секунд.

...