Mon application commence à l'envers

Un moteur sur lequel j'ai travaillé pendant un certain time et qui a livré des jeux lance maintenant mon projet actuel à l'envers et fait tout de suite tourner l'UIView comme il se doit. Je crée l'interface avec du code et voici à quoi cela ressemble:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... CGRect screenBounds = [[UIScreen mainScreen] applicationFrame]; CGRect windowBounds = screenBounds; windowBounds.origin.y = 0.0; UIWindow* win = [[UIWindow alloc] initWithFrame:windowBounds]; win.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; UIMyView* view = [[UIMyView alloc] initWithFrame:screenBounds]; UIMyViewController* controller = [[UIMyViewController alloc] init]; controller.view = view; view.multipleTouchEnabled = true; view.windowWrapper = this; view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [win addSubview:view]; ... } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation; { s32 validOrientations = ((cViewMM*)(self.view)).windowWrapper->GetValidOrientations(); if (toInterfaceOrientation == UIInterfaceOrientationPortrait && (validOrientations & 0x01)) return true; if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown && (validOrientations & 0x02)) return true; if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft && (validOrientations & 0x04)) return true; if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight && (validOrientations & 0x08)) return true; return false; } 

Le problème se produit uniquement si je veux lancer l'application dans UIInterfaceOrientationLandscapeLeft. Débogage à travers l'application, il ressemble à quand j'essaye d'append mon affichage à la window en interne le shouldAutorotateToInterfaceOrientation: est appelé plusieurs fois. D'abord avec UIInterfaceOrientationPortrait qui returnne false puis UIInterfaceOrientationLandscapeRight qui renvoie true (puisque son orientation est valide) et ensuite UIInterfaceOrientationLandscapeLeft qui renvoie aussi true (puisque c'est une orientation valide et c'est l'orientation actuelle du périphérique).

Oh, et pour être plus précis, cela ne se passe que sur iPhone et non sur iPad. Ils utilisent le même code pour configurer cette vue.

Qu'est-ce que je fais mal?

— MODIFIER —

OK Je me suis trompé sur l'exécution de shouldAutorotateToInterfaceOrientation: il est exécuté 3 fois en demandant UIInterfaceOrientationPortrait, 2 fois pour UIInterfaceOrientationLandscapeLeft, puis une fois pour UIInterfaceOrientationLandscapeRight, et à nouveau une fois UIInterfaceOrientationLandscapeLeft.

GameCenter est déjà en cours d'initialisation à ce stade et comme il pousse une interface user supplémentaire, je pensais que c'était peut-être le cas, mais ce n'était pas le cas.

Vérifiez dans votre Info.plist que le tableau des orientations sockets en charge commence par portrait (recto vers le haut). Si cela commence avec une orientation différente votre application lancera dans cette orientation.

J'avais ce même problème et j'étais sortingste de le voir sans réponse. Puis j'ai réalisé une chose key qui prouve que c'est juste comment les choses fonctionnent: l'image de démarrage Default.png est aussi à l'envers. Il n'y a rien que vous pouvez faire dans votre application pour résoudre ce problème. Vous pouvez choisir le mode paysage qui démarre correctement (button d'accueil à gauche ou à droite), mais vous ne pouvez pas les faire fonctionner DEUX.

Trouvé la solution!

Evidemment, il y a un bug dans Interface Builder. Si vous cliquez simplement sur toutes les orientations, cliquez dessus dans l'ordre souhaité. Info.plist est construit correctement.

Dans mon cas, cela a fonctionné comme tgunr dit MAIS j'ai dû retirer du dossier du simulateur l'set de l'application, sinon, le changement d'orientation n'a pas fonctionné.