Переход анимации RootViewController, неправильная начальная ориентация
Итак, я последовал этой теме: RootViewController Switch Transition Animation, чтобы перевести window.rootViewController с A на B на C. Код выглядит следующим образом:
[UIView transitionWithView:self.window
duration:0.5
options: UIViewAnimationOptionTransitionFlipFromLeft
animations:^{
self.window.rootViewController = newViewController;
}
completion:nil];
Проблема заключается в том, что мое приложение должно поддерживать только пейзаж, но во время перехода rootViewController новый диспетчер представлений отображается в портретном режиме, чем при быстром перемещении в альбомный режим.
Я уверен, что:
- Я установил UISupportedOrientation в альбомную (домашняя кнопка справа)
- для каждого viewcontroller, в методе shouldAutoRotateToOrientation, я устанавливаю только для пейзажа
Какая может быть другая причина?
Ответы
Ответ 1
Я изучил это только сейчас, потому что я продолжал получать ту же проблему. Я случайно попробовал следующее, и он отлично работал:
[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];
Я знаю немного странно отключать/активировать анимацию внутри блока анимации, но крест растворяет анимацию, а вращение - нет, контроллер представлений уже повернут и готов к качению.
Ответ 2
Просто добавьте еще один вариант анимации UIViewAnimationOptionAllowAnimatedContent
:
[UIView transitionWithView:self.window duration:0.5 options:(UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionAllowAnimatedContent) animations:^{
self.window.rootViewController = newViewController;
} completion:nil];