iPhone app en mode paysage, 2008 systèmes

voix
88

Remarque: cette question est de 2008 et est maintenant seulement 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 du dispositif?

Les deux et en utilisant le programme d'Interface Builder.

Créé 02/08/2008 à 11:47
source utilisateur
Dans d'autres langues...                            


8 réponses

voix
46

Réponse historique seulement. Spectaculairement à jour:

S'il vous plaît noter que cette réponse est maintenant extrêmement obsolète.

Ce poste est seulement une curiosité historique .


Nouvelles excitantes! Comme découvert par Andrew ci-dessous, ce problème a été corrigé par Apple en 4.0+.

Il semblerait qu'il est plus nécessaire de forcer la taille de la vue sur tous les plans, et le grave problème spécifique du paysage « ne travaille la première fois » a été résolu.

En Avril 2011, il est impossible de tester ou même construire quoi que ce soit en dessous de 4,0, donc la question est purement une curiosité historique. Il est incroyable combien les développeurs du mal a causé depuis si longtemps!


Voici la discussion originale et de la solution. Ceci est tout à fait hors de propos maintenant, car ces systèmes ne sont même pas fonctionner.


Il est extrêmement difficile de faire ce travail tout à fait - il y a au moins trois problèmes / bugs en jeu.

essayer .. Interface Builder conception du paysage

Notez en particulier que où il est dit « et vous avez besoin d'utiliser correctement shouldAutorotateToInterfaceOrientation partout » cela signifie partout, toutes vos vues en plein écran.

Espérons que cela aide dans ce cauchemar!

Un rappel important du problème bien connu ADDITIONNEL à portée de main ici: si vous essayez d'échanger entre PLUS D'UNE vue (tous les paysages), SIMPLEMENT IL NE FONCTIONNE PAS . Il est essentiel de se rappeler ceci ou vous gaspillerez jours sur le problème. Il est littéralement pas possible. Il est le plus grand ouvert, connu, bug sur la plate - forme iOS. Il n'y a littéralement aucun moyen de rendre le matériel faire la deuxième vue que vous chargez, être paysage. La solution de contournement ennuyeux , mais simple, et ce que vous devez faire, est d' avoir un UIViewController maître trivial qui ne fait rien , mais assis là et vous permettent de basculer entre vos vues.

En d'autres termes, dans iOS à cause d'un bug majeur savoir:

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

Vous pouvez le faire qu'une seule fois . Plus tard, si vous essayez de supprimer happyThing.view, et plutôt mettre làdedans newThing.view, IL NE FONCTIONNE PAS - ET QUE VOILÀ. La machine ne sera jamais tourner la vue de paysage. Il n'y a passolution de truc, même Apple ne peut pasfaire fonctionner. La solutionvous devez adopter estavoir une UIViewController globale qui se trouve simplement là et juste tient vos différents pointsvue (happyThing, newThing, etc.). J'espère que cela aide!

Créé 27/03/2010 à 22:13
source utilisateur

voix
40

De l'Apple Dev site:

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

2: Lancement de votre application en mode paysage

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
Créé 31/08/2008 à 15:38
source utilisateur

voix
27

Résumé et intégration de tous les postes, après moi-même le tester; vérifier la mise à jour 4.x, 5.x ci-dessous.

A partir de 3.2, vous ne pouvez pas changer l'orientation d'une application en cours d'exécution du code.

Mais vous pouvez commencer une application avec une orientation fixe, même si cela n'est pas évidente.

Essayez cette recette:

  1. définir votre orientation UISupportedInterfaceOrientationsdans le Info.plistfichier
  2. dans la fenêtre définir un « contrôleur de vue de base » 480x320. Chaque autre point de vue sera ajouté en tant que sous-vue à son point de vue.
  3. dans tous les contrôleurs de vue mis en place la shouldAutorotateToInterfaceOrientation:méthode (pour retourner la même valeur que celle définie dans le plist, bien sûr)
  4. dans tous les contrôleurs de vue définir une vue d'arrière-plan avec

    self.view.frame = CGRectMake(0, 0, 480, 320)

    dans le viewDidLoadprocédé.

Mise à jour (iOS 4.x, 5.x) : l'Apple App iOS Guide de programmation a un "lancement en mode paysage" paragraphe dans le chapitre "Advanced App Tricks".

Les références:

Créé 07/05/2010 à 12:02
source utilisateur

voix
7

Tout d'abord, je les réglerai info.plist

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

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.

Créé 20/11/2009 à 21:58
source utilisateur

voix
6

La réponse de DGSDE et michaelpryor semble correct, 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 pouvez également appeler d' window makeKeyAndVisible;abord.

Quelques liens: Le développement en mode paysage , iPhone SDK: Comment forcer le mode paysage seulement?

@ Robert: s'il vous plaît se référer à l'iPhone SDK, NDA, et le débordement de pile .

Créé 31/08/2008 à 16:01
source utilisateur

voix
5

Je ne suis pas surpris un est venu avec cette réponse encore:

Dans tous mes tests quand destituant un contrôleur de vue modal orientation préférentielle du contrôleur de vue parent situé dans shouldAutorotateToInterfaceOrientationest honorée même si une partie d'un UINavigationController. Donc , la solution est simple:

Créer un UIViewController factice avec un UIImageView pour un fond. Réglez l'image à l'image default.png votre application utilise au démarrage.

Quand viewWillAppearest appelé dans votre contrôleur de vue racine, juste présenter le contrôleur de vue factice sans animation.

quand viewDidAppearest appelé dans votre contrôleur de vue fictif, rejeter le contrôleur de vue avec une belle Fondu animation.

Non seulement ce travail, mais il semble bon! BTW, juste pour clarifier que je fais le contrôleur vue racine de viewWillAppearce genre:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
Créé 27/11/2010 à 08:38
source utilisateur

voix
4

Le dernier iPhone OS Guide de programmation a une section complète sur ce point, avec le code d'échantillon. Je suis sûr que c'est un ajout récent, alors peut-être vous l'avez manqué. Il explique toutes les conditions que vous avez à respecter; fondamentalement...

  • définir les propriétés Info.plist (cela change la position de la barre d'état, mais pas la vue)
  • faire pivoter la vue manuellement autour de son centre, soit sur votre UIViewController viewDidLoad: méthode ou votre méthode applicationDidFinishLaunching: ou mettre en œuvre la rotation automatique (les « comportements » Autoresizing page 124)

Cherchez « Lancement en mode paysage », à la page 102.

Créé 04/09/2008 à 22:57
source utilisateur

voix
3

Voir cette réponse: mode paysage uniquement pour iPhone ou iPad

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

Bien que si vous utilisez des modes mixtes, vous pourriez être mieux avec

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Créé 06/03/2011 à 08:56
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more