web-dev-qa-db-fra.com

Transition de l'animation RootViewController, l'orientation initiale est incorrecte

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:

  1. J'ai défini UISupportedOrientation sur paysage (bouton d'accueil à droite)
  2. pour chaque viewcontroller, dans la méthode shouldAutoRotateToOrientation, je définis uniquement pour le paysage

Quelle pourrait être l'autre raison?

48
Chris Chen

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.

119
Kalle

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];
9
Borut Tomazin