Как добавить анимацию в UIView в viewDidAppear? - PullRequest
7 голосов
/ 03 февраля 2010

Я пытался добавить анимацию в viewDidLoad и viewDidAppear, но она не работает:

- (void)viewDidAppear:(BOOL)animated{
 [UIView beginAnimations:@"transition" context:NULL];
 [UIView setAnimationTransition:110 forView:self.view cache:YES];
 [UIView commitAnimations];
}

Почему?

Ответы [ 3 ]

24 голосов
/ 05 февраля 2011

У меня была такая же проблема, и я думаю, что нашел решение по этому ТАКому вопросу .

Когда вызывается viewDidAppear, вы все равно ничего не видите на экране (несмотря на название), но вы собираетесь. Затем вы можете использовать executeSelector: withDelay или NSTimer для запуска анимации. Задержка может составлять всего 0,1, и ваша анимация будет воспроизводиться только при появлении экрана.

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    NSLog(@"View did appear!");

    [self performSelector:@selector(animationCode) withObject:nil afterDelay:0.1f];
}

- (void)animationCode {
    // you animation code
}
0 голосов
/ 03 февраля 2010
  1. Вы не используете beginAnimations: и commitAnimations правильно.Вы должны поместить между ними что-то, что обычно не будет анимированным: например, с self.view.alpha = 0.5 вы получите эффект затухания. Они не влияют ни на что, что находится между ними.

  2. К тому времени, когда вызывается viewDidAppear:, ваш взгляд, ну ... появился.Уже слишком поздно, чтобы оживить что-либо.На самом деле вы хотите сделать что-то вроде этого:

    - (void)showMyViewWithAnimation {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationTransition:110 forView:childView cache:YES];
        [parentView addSubview:childView];
        [UIView commitAnimations];
    }
    

    В приведенном выше примере childView - это то, что в вашем примере называется self.view.

  3. Пожалуйста, напишите название перехода;никто не знает, что такое 110, глядя на него.Это плохой стиль.

0 голосов
/ 03 февраля 2010

Вы не указываете представлению, в каком состоянии он должен анимироваться, чтобы он ничего не делал. Вам нужно поместить код между beginAnimations:context: и commitAnimations, который изменяет внешний вид представления (например, удаляя одно подпредставление и добавляя другое).

...