Cette question est à propos de l'appareil iOS rotation et de multiples contrôlés points de vue dans un UINavigationController. Certains points de vue devraient être contraint de portrait de l'orientation, et certains devraient autorotate librement. Si vous essayez de créer la configuration la plus simple, avec trois points de vue, vous remarquerez que l'autorotation comportement a quelques très méchant bizarreries. Le scénario est, cependant, très simple, donc je pense que je vais pas faire l'autorotation mise en œuvre correctement, ou j'oublie quelque chose.
J'ai une base de démonstration app qui montre l'étrangeté, et j'ai fait une vidéo le montrant en action.
- Télécharger l'application (XCode projet)
- Voir les classes comme une gist (plutôt longue)
- Regarder la question de la vidéo (YouTube, 2m43s)
L'installation est très simple: Trois voir les contrôleurs appelés FirstViewController
, SecondViewController
et ThirdViewController
tous étendre AbstractViewController
qui montre une étiquette avec le nom et que le retour OUI pour shouldAutorotateToInterfaceOrientation:
lorsque l'appareil est en orientation portrait. Le SecondViewController remplace la cette méthode pour permettre à tous les rotations. Tous les trois classes de béton ajouter quelques carrés de couleur pour être en mesure de naviguer entre les points de vue, en poussant et en sautant les contrôleurs sur/off de l' UINavigationController
. Jusqu'à présent, un scénario très simple, je dirais.
Si vous tenez l'appareil en mode portrait ou paysage, c'est le résultat que je ne souhaite pas uniquement à réaliser, mais il serait également s'attendre. Dans la première image que vous voyez que tous les points de vue sont "debout", et dans le deuxième vous voyez que seul le second point de vue contrôleur de contre-fait pivoter l'appareil de l'orientation. Pour être clair, il devrait être possible de naviguer à partir de la seconde vue en mode paysage pour la troisième, mais parce que le troisième prend uniquement en charge le mode portrait, il ne doit être indiqué dans l'orientation portrait. La meilleure façon de voir si les résultats sont bon, c'est en regardant la position du transporteur bar.
Mais cette question ici, car le résultat est complètement différent. Selon ce point de vue, vous êtes lorsque vous faites pivoter l'appareil, et selon ce point de vue, vous accédez à la prochaine, les points de vue ne tourne pas (pour être précis, l' didOrientFromInterfaceOrientation:
méthode n'est jamais appelé). Si vous êtes en mode paysage sur le deuxième et accédez à la troisième, elle a la même orientation que la seconde (=mauvais). Si vous naviguez à partir de la deuxième retour à la première toutefois, l'écran va tourner dans un "forcé" en mode portrait, et le transporteur bar sera à la physique dessus de l'appareil, indépendamment de la façon dont vous êtes titulaire d'elle. La vidéo montre plus en détail.
Ma question est double:
- Pourquoi le premier point de vue contrôleur de tourner en arrière, mais pas le troisième?
- Ce qui doit être fait pour obtenir le bon comportement de votre point de vue quand vous voulez seulement quelques points de vue à rotation automatique, mais pas d'autres?
Cheers, EP.
EDIT: Comme un dernier recours avant de mettre un bounty sur elle, j'ai complètement réécrit cette question pour être plus court, plus clair et j'espère que plus d'invitation à donner une réponse.