Autorotation iPhone uniquement sur des écrans spécifiques sous un contrôleur de navigation

StackOverflow https://stackoverflow.com/questions/1009915

Question

Ceci est juste un exemple du problème de base que j'ai, alors ne vous inquiétez pas si cette situation semble un peu inutile;)

Disons que j'ai une application qui est principalement un UINavigationController à deux niveaux. Le niveau supérieur est une table avec une liste de noms de fichiers d’images, et le deuxième niveau ne contient qu’un UIImageView montrant l’image correspondant au nom de fichier que vous avez tapé.

Pour une application de ce type, est-ce que quelqu'un connaît un bon moyen de permettre à la table du premier niveau de faire une autorotation tout en conservant le second niveau d'images en mode portrait?

Jusqu’à présent, j’ai presque réussi à y arriver ... mais lorsque je tape un nom de fichier en mode paysage, l’image glisse dans la vue dans le mauvais sens, même si shouldAutorotateToInterfaceOrientation du contrôleur de la vue de second niveau renvoie oui pour portrait uniquement. modes.

Était-ce utile?

La solution

Le problème est que si vous utilisez la rotation automatique, toute l'interface utilisateur (y compris l'instance UIWindow, je crois) est soumise à une rotation.

Tout ce qui est enfoncé sur le contrôleur de navigation à ce stade se fera en mode paysage.

Donc, lorsque vous poussez l'image, c'est exactement ce que vous obtenez.

Pour que cela fonctionne, vous devez soit:

  1. Gère la rotation de la vue racine manuellement (en utilisant une transformation)
  2. Désactiver l'affichage de l'image par -PI / 2 en utilisant une transformation.

De toute façon, vous devez effectuer les transformations manuellement pour que cela fonctionne.

En remarque, cela peut être une mauvaise conception de l'interface utilisateur. En tant qu'utilisateur, je m'attendrais à ce que j'exploite correctement les images. Mais ceci est sans connaître le contexte exact de votre application.

Autres conseils

Il n'y avait pas de bonne façon de faire cela dans iPhone OS 2.x, mais dans la version 3.0, ils l'ont considérablement amélioré.

Dans la version 2.x, la méthode de délégation shouldAutorotateToInterfaceOrientation: n'a été respectée que pour les modifications de l'orientation, afin d'obtenir le comportement que vous décrivez: si la rotation a été effectuée dans un autre contrôleur de vue, il resterait en rotation lors de poussées et de sauts même si le nouveau contrôleur de vue ne supportait pas la rotation dans cette orientation.

Dans la version 3.0, UINavigationController interroge shouldAutorotateToInterfaceOrientation: à chaque poussée ou pop et obéit à ce qu'il retourne comme vous le souhaiteriez, par exemple: si vous êtes actuellement pivoté dans l'orientation Paysage de gauche, et que vous une instance d'un contrôleur de vue qui ne prend en charge l'orientation Portrait que par shouldAutorotateToInterfaceOrientation: , elle inverse automatiquement et instantanément l'orientation logique et fait glisser la nouvelle vue de la bonne manière dans l'orientation Portrait.

Notez que cela ne fonctionnera que sur les applications liées à (et donc nécessitant) 3.0. Pour les applications liées à 2.x, il imitera l'ancien comportement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top