RootViewController анимация перехода, первоначальная ориентация неверна - PullRequest
48 голосов
/ 08 ноября 2011

Итак, я следовал этой теме: Анимация перехода переключателя RootViewController для передачи window.rootViewController из A в B в C. Код выглядит следующим образом:

[UIView transitionWithView:self.window 
                  duration:0.5 
                   options: UIViewAnimationOptionTransitionFlipFromLeft 
                animations:^{
                               self.window.rootViewController = newViewController;
                } 
                completion:nil];

Проблема в моемприложение должно поддерживать только альбомную ориентацию, но при переходе rootViewController новый контроллер представления отображается в портретном режиме, а затем быстро переходит в альбомную ориентацию.

Я уверен, что:

  1. I 'Мы установили UISupportedOrientation в ландшафт (кнопка «Домой» справа)
  2. для каждого контроллера представления, в методе shouldAutoRotateToOrientation я установил только для ландшафта

В чем может быть другая причина?

Ответы [ 2 ]

119 голосов
/ 14 декабря 2011

Я изучил это только сейчас, потому что продолжал получать ту же самую проблему. Я случайно попробовал следующее, и это сработало отлично:

[UIView
    transitionWithView:window 
    duration:0.5
    options:UIViewAnimationOptionTransitionCrossDissolve
    animations:^(void) {
        BOOL oldState = [UIView areAnimationsEnabled];
        [UIView setAnimationsEnabled:NO];
        [(ICApp *)sharedApplication.delegate window].rootViewController = self;
        [UIView setAnimationsEnabled:oldState];
    } 
    completion:nil];

Я знаю, что немного странно отключать / включать анимации внутри блока анимации, но перекрестное растворение оживляет, а вращение - нет - контроллер представления уже повернут и готов к вращению.

9 голосов
/ 09 января 2013

Просто вставьте другой параметр анимации UIViewAnimationOptionAllowAnimatedContent:

[UIView transitionWithView:self.window duration:0.5 options:(UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionAllowAnimatedContent) animations:^{
    self.window.rootViewController = newViewController;
} completion:nil];
...