J'ai donc suivi ce fil: Animation de transition de commutateur RootViewController pour faire transiter le window.rootViewController de A à B vers C.Le code ressemble à ceci:
[UIView transitionWithView:self.window
duration:0.5
options: UIViewAnimationOptionTransitionFlipFromLeft
animations:^{
self.window.rootViewController = newViewController;
}
completion:nil];
Le problème est que mon application ne prend en charge que le paysage, mais pendant la transition rootViewController, le nouveau contrôleur de vue apparaît en mode portrait puis passe rapidement en mode paysage.
Je suis sûr que:
Quelle pourrait être l'autre raison?
J'ai examiné cela tout à l'heure parce que je continuais à avoir le même problème. J'ai essayé au hasard ce qui suit, et cela a parfaitement fonctionné:
[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];
Je sais que c'est un peu étrange de désactiver/activer des animations à l'intérieur d'un bloc d'animation, mais la dissolution croisée s'anime, et la rotation ne le fait pas - le contrôleur de vue semble déjà tourné et prêt à rouler.
Mettez simplement une autre option d'animation UIViewAnimationOptionAllowAnimatedContent
:
[UIView transitionWithView:self.window duration:0.5 options:(UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionAllowAnimatedContent) animations:^{
self.window.rootViewController = newViewController;
} completion:nil];