Veuillez noter que cette question date de 2008 et n'a maintenant qu'un intérêt historique.
Quelle est la meilleure façon de créer une application iPhone qui fonctionne en mode paysage depuis le début, quelle que soit la position de l'appareil?
À la fois par programme et en utilisant le générateur d'interface.
ios
objective-c
landscape
Michiel de Mare
la source
la source
Réponses:
Réponse historique seulement. Spectaculairement démodé.
Veuillez noter que cette réponse est maintenant très obsolète /
Cette réponse n'est qu'une curiosité historique .
Nouvelles excitantes! Comme découvert par Andrew ci-dessous, ce problème a été résolu par Apple dans la version 4.0+.
Il semblerait qu'il ne soit plus nécessaire de forcer la taille de la vue sur chaque vue, et le grave problème spécifique du paysage "ne fonctionnant que la première fois" a été résolu.
Depuis avril 2011, il n'est pas possible de tester ou même de construire quoi que ce soit en dessous de 4.0, donc la question est purement une curiosité historique. C'est incroyable à quel point cela a causé des problèmes aux développeurs pendant si longtemps!
Voici la discussion originale et la solution. Ceci est totalement hors de propos maintenant, car ces systèmes ne sont même pas opérationnels.
Il est EXTRÊMEMENT DIFFICILE de faire en sorte que cela fonctionne pleinement - il y a au moins trois problèmes / bogues en jeu.
essayez ceci .. conception de paysage de constructeur d'interface
Notez en particulier que là où il est dit «et que vous devez utiliser shouldAutorotateToInterfaceOrientation correctement partout», cela signifie partout, toutes vos vues en plein écran.
J'espère que cela aide dans ce cauchemar!
Un rappel important du problème ADDITIONNEL bien connu à portée de main ici: si vous essayez de basculer entre PLUS D'UNE vue (tout paysage), CELA NE FONCTIONNE PAS SIMPLEMENT . Il est essentiel de s'en souvenir ou vous perdrez des jours sur le problème. Ce n'est littéralement PAS POSSIBLE. C'est le plus gros bogue ouvert et connu sur la plate-forme iOS. Il n'y a littéralement aucun moyen de faire en sorte que le matériel transforme la deuxième vue que vous chargez en paysage. La solution de contournement ennuyeuse mais simple, et ce que vous devez faire, est d'avoir un maître UIViewController trivial qui ne fait rien d'autre que rester là et vous permet de basculer entre vos vues.
En d'autres termes, sous iOS à cause d'un bug majeur connu:
Vous ne pouvez le faire qu'une seule fois . Plus tard, si vous essayez de supprimer happyThing.view et que vous y mettez à la place newThing.view, CELA NE FONCTIONNE PAS - ET C'EST CELA. La machine ne fera jamais pivoter la vue en paysage. Il n'y a pas de solution miracle, même Apple ne peut pas le faire fonctionner. La solution de contournement que vous devez adopter est d'avoir un UIViewController global qui se trouve simplement là et ne contient que vos différentes vues (happyThing, newThing, etc.). J'espère que ça aide!
la source
Depuis le site des développeurs Apple:
la source
Résumé et intégration de tous les articles, après l'avoir testé moi-même; vérifiez la mise à jour pour 4.x, 5.x ci-dessous.
À partir de la version 3.2, vous ne pouvez pas modifier l'orientation d'une application en cours d'exécution à partir du code.
Mais vous pouvez démarrer une application avec une orientation fixe, bien que cela ne soit pas simple.
Essayez avec cette recette:
UISupportedInterfaceOrientations
dans leInfo.plist
fichiershouldAutorotateToInterfaceOrientation:
méthode (pour renvoyer la même valeur que vous avez définie dans le plist, bien sûr)dans tous les contrôleurs de vue définissent une vue d'arrière-plan avec
self.view.frame = CGRectMake(0, 0, 480, 320)
dans la
viewDidLoad
méthode.Mise à jour (iOS 4.x, 5.x) : le Guide de programmation de l'application Apple iOS contient un paragraphe «Lancement en mode paysage» dans le chapitre «Astuces avancées de l'application».
Références:
la source
J'ai d'abord mis dans info.plist
puis je mets ce code dans applicationDidFinishLaunching:
De cette façon, je peux travailler sur la vue dans Interface Builder en mode paysage.
la source
La réponse de sasb et de michaelpryor semble être correcte, mais si cela ne fonctionne pas pour vous, essayez cette alternative:
Ou celui-ci:
Ou celui-ci:
Vous devrez peut-être également appeler en
window makeKeyAndVisible;
premier.Quelques liens: Développement en mode paysage , SDK iPhone: Comment forcer le mode Paysage uniquement?
@Robert: veuillez vous reporter à l'iPhone SDK, NDA et Stack Overflow .
la source
Je suis surpris que personne n'ait encore trouvé cette réponse:
Dans tous mes tests, lors du rejet d'un contrôleur de vue modale, l'orientation préférée du contrôleur de vue parent définie
shouldAutorotateToInterfaceOrientation
est respectée même lorsqu'elle fait partie d'un UINavigationController. La solution à cela est donc simple:Créez un UIViewController factice avec un UIImageView pour un arrière-plan. Définissez l'image sur l'image default.png que votre application utilise au démarrage.
Lorsqu'il
viewWillAppear
est appelé dans votre contrôleur de vue racine, présentez simplement le contrôleur de vue factice sans animation.lorsqu'il
viewDidAppear
est appelé dans votre contrôleur de vue factice, fermez le contrôleur de vue avec une belle animation de dissoudre croisée.Non seulement cela fonctionne, mais ça a l'air bien! BTW, juste pour clarifier, je fais le contrôleur de vue racine
viewWillAppear
comme ceci:la source
Le dernier guide de programmation iPhone OS contient une section complète à ce sujet, avec un exemple de code. Je suis sûr que c'est un ajout récent, alors peut-être que vous l'avez manqué. Il explique toutes les conditions que vous devez respecter; fondamentalement...
Recherchez «Lancement en mode paysage», page 102.
la source
Voir cette réponse: Mode paysage UNIQUEMENT pour iPhone ou iPad
Bien que si vous utilisez des modes mixtes, vous feriez peut-être mieux d'utiliser
la source