Mixer les orientations
Hello
Je souhaite mixer les orientations possibles pour une appli.
- pour 50% des view controllers seule l'orientation landscape est possible (y compris le launchScreen...)
- pour 50% des autres VC, toutes les orientations sont possibles
Est-ce que vous savez comment faire cela de façon pratique ?
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je crois que c'est une des choses dont j'ai les pires difficultés à réaliser de façon claire.
Je dirais juste que de ma propre expérience, je déconseilles de bloquer dans les infos Xcode le téléphone en portrait. Vaut mieux laisser toutes les orientations et bloquer via le code. Je dis ça parce qu'il arrive très souvent d'avoir toute l'app en portrait mais juste 1 ou 2 vues en paysage et là on fait des choses dégueulasse pour que ça fonctionne.
Dans l'AppDelegate tu peux dire si t'es en paysage en orientation. Quand t'as 1 ou 2 vues tu peux donc gérer facilement ici quels sont ceux en portraits/paysages mais c'est pas forcément ce que je te conseilles vu ton besoin (à moins d'avoir une archi par exemple avec un protocol pour ceux seulement en portrait et ceux en paysage ?).
Sinon dans chaque Controller tu peux le spécifier mais c'est là que je bloques un peu car dans mes essais j'ai jamais pu le faire fonctionner correctement. Je dois m'y prendre très mal alors que ça parait simple.
Merci pour ta réponse qui va bien m'aider je pense.
Est-ce que tu aurais un peu de code à partager ?
Mais appli est plus pour l'instant 100% landscape mais j'aimerais autoriser le portrait pour un MFMessageComposer ou MFMailComposer.
Oui. L'exemple avec l'AppDelegate par exemple. J'avais 2 controllers pour qui toutes les orientations étaient possibles. Le reste étant en position Portrait seulement.
Il y a une meilleure solution.
Mais il faut savoir quels viewControllers que tu veuilles garder dans une orientation.
Il faut, aussi, regarder si le viewController est dans une UITabBarController ou UINavigationController
En cas de UITabBarController, tu crées une classe comme ci :
Si le viewController est dans un UINavigationController et tu veux limiter l'orientation pour tous les viewControllers là dedans :
Si tu ne veux limiter qu'un viewController dans le UINavigationController :
Et, dans le viewController dont tu veux garder l'orientation :
Mais, de mon expérience, il faut utiliser le débogueur pour déterminer le type du selectedViewController ou visibleViewController.
Et, de mon avis, il ne rime pas de forcer l'orientation d'un ou plusieurs viewController dans la même UINavigationController, car le navigationBar restera dans la même orientation est ça pourrait perturber l'utilisateur.
Merci de ta réponse Joanna.
A priori mes VC ne sont pas dans des UITabBarController ni dans des UINavigationController.
Est-ce du coup ça change quelque chose à ta proposition ?
Si c'est le cas, comment changes-tu les viewControllers ?
En gros, j'ai un RootViewController dans lequel j'ai des sous-VCs qui changent.
Et comment déclenches-tu les changements ?
Avec des UIButton !
Entre les viewControllers. Qu'est-ce qu'on doive faire pour passer d'un à un autre ?
Excuse-moi Joanna, j'avais mal compris ta question.
Pour passer entre les VCs, c'est des UIButton (ou des UITapGestureReco).
Si tu parles de ton appli improov, je peux voir que tu as un comportement comme un UINavigationController, avec les flèches pour reculer.
Dans ce cas là , je dirais que tu devrais mettre le code de NavigationController dans ton "container" viewController, maintenir une référence à ton sous viewController actuel, et que tu ajoutes le concept de visibleViewController pour le dire comment tu veux permettre son orientation.
Puis, dans chaque viewController dont tu veux maintenir l'orientation, tu ajoutes le code de l'exemple ViewController.
OK Merci Joanna,
Je ne vais pas coder maintenant ce mix des orientations dans l'immédiat. Je me renseignais avec un peu d'avance, mais je regarderai ta solution.