ios - Application iPhone en mode paysage, systèmes 2008

Translate

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 s'exécute 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.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Réponse historique seulement. Spectaculairement démodé.

Veuillez noter que cette réponse est maintenant très obsolète /

Cette réponse estseulement 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, la question est donc purement une curiosité historique. C'est incroyable combien 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.

essaye ça ..conception de paysage de constructeur d'interface

Notez en particulier que là où il est dit"et 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 permuter entrePLUS D'UNvue (tout paysage),IL 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:

[window addSubview:happyThing.view];
[window makeKeyAndVisible];

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 astucieuse, 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 cela aide!

La source
Translate

Depuis le site des développeurs Apple:

Pour démarrer votre application en mode paysage afin que la barre d'état soit immédiatement dans la position appropriée, modifiez votre fichier Info.plist pour ajouter la clé UIInterfaceOrientation avec la valeur appropriée (UIInterfaceOrientationLandscapeRight ou UIInterfaceOrientationLandscapeLeft), comme indiqué dans le listing 2.

Listing 2: Démarrer votre application en mode paysage

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
La source
Translate

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.

Depuis 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:

  1. définir votre orientation surUISupportedInterfaceOrientationsdans leInfo.plistfichier
  2. dans votre fenêtre définissez un "contrôleur de vue de base" 480x320. Chaque autre vue sera ajoutée en tant que sous-vue à sa vue.
  3. dans tous les contrôleurs de vue, configurez leshouldAutorotateToInterfaceOrientation:méthode (pour renvoyer la même valeur que vous avez définie dans le plist, bien sûr)
  4. 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 leviewDidLoadmé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
Translate

J'ai d'abord mis dans info.plist

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

puis je mets ce code dans applicationDidFinishLaunching:

CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633);
[window setTransform:rotate];

CGRect contentRect = CGRectMake(0, 0, 480, 320); 
window.bounds = contentRect; 
[window setCenter:CGPointMake(160.0f, 240.0f)]; 

De cette façon, je peux travailler sur la vue dans Interface Builder en mode paysage.

La source
Translate

La réponse de sasb et de michaelpryor semble être correcte, mais si cela ne fonctionne pas pour vous, essayez cette alternative:

- (void)applicationDidFinishLaunchingUIApplication *)application {
    application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}

Ou celui-ci:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Ou celui-ci:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

Vous devrez peut-être également appelerwindow makeKeyAndVisible;première.

Quelques liens:Développer en mode paysage, iPhone SDK: comment forcer le mode paysage uniquement?

@Robert: veuillez vous référer àLe SDK iPhone, NDA et le débordement de pile.

La source
Translate

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 est définie dansshouldAutorotateToInterfaceOrientationest honoré même lorsqu'il 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.

QuandviewWillAppearest appelé dans votre contrôleur de vue racine, présentez simplement le contrôleur de vue factice sans animation.

quandviewDidAppearest 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 racineviewWillAppearcomme ça:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
La source
Muriel Lee
Translate

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...

  • définir les propriétés Info.plist (cela modifie la position de la barre d'état, mais pas la vue)
  • faites pivoter manuellement votre vue autour de son centre, soit sur votre méthode UIViewController viewDidLoad: soit sur votre méthode applicationDidFinishLaunching: ou implémentez la rotation automatique ("Redimensionnement automatique des comportements", page 125)

Recherchez «Lancement en mode paysage», page 102.

La source
Translate

Voir cette réponse:Mode paysage UNIQUEMENT pour iPhone ou iPad

  1. ajouter une orientation à plist
  2. shouldAutorotateToInterfaceOrientation = OUI dans tous les fichiers

Bien que si vous utilisez des modes mixtes, vous serez peut-être mieux avec

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
La source