53 votes

Comment déterminer par programme interface de l'iPhone d'orientation?

Les valeurs possibles pour UIDevice.orientation comprennent UIDeviceOrientationFaceUp et UIDeviceOrientationFaceDown. Alors qu'il pourrait être utile de savoir que l'appareil est à plat, ce n'est pas nous dire si elle est à plat de l'affichage d'une interface orienté en mode portrait ou paysage. Est-il un moyen de trouver l'orientation actuelle de l'IHM dans le cas où l'appareil est de retour ambigu de l'information? Je suppose que j'ai pu suivre l'orientation des événements de changement de rappeler le dernier portrait/paysage de l'orientation ou de vérifier les principaux UIView de limites de hauteur et de largeur, mais qui semble kludgey. Est-il bien sur l'appareil ou UIView que je suis absent?

96voto

beryllium Points 18138

Vous pouvez obtenir l'orientation de 3 manières:

  1. UIInterfaceOrientation orientation = self.interfaceOrientation; retourne UIInterfaceOrientation, l'orientation actuelle de la de l'interface. C'est une propriété de UIViewController, vous pouvez accéder à ce une seule dans UIViewController classes.

  2. UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; retourne UIInterfaceOrientation, l'orientation actuelle de la l'application de la barre d'état. Vous pouvez accéder à la propriété en toute point de votre application. Mon expérience montre que c'est le plus moyen efficace pour récupérer interface réelle orientation.

  3. UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; retours UIDeviceOrientation, orientation de l'écran. Vous pouvez accéder à la propriété dans n'importe quel point de votre application. Mais notez que UIDeviceOrientation n'est pas toujours UIInterfaceOrientation. Par exemple, lorsque votre appareil est sur une plaine tableau, vous pouvez recevoir la valeur inattendue.

92voto

georg Points 1742

Dans un viewcontroller vous pouvez simplement utiliser le code:

UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;

Le UIInterfaceOrientation est un enum:

typedef enum {
  UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
  UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
  UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeLeft,
  UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeRight
} UIInterfaceOrientation;

14voto

Chris O'Sullivan Points 251

Si vous venez de soins que l'appareil est en mode paysage ou portrait, il y a quelques belles méthodes pratiques sur le viewcontroller:

UIDeviceOrientationIsLandscape(self.interfaceOrientation)
UIDeviceOrientationIsPortrait(self.interfaceOrientation)

11voto

Tibidabo Points 10510

Barre d'état de l'orientation (statusBarOrientation) renvoie toujours l'interface de l'orientation , même si la barre d'état est caché.

Vous pouvez utiliser la barre d'état de l'orientation sans une-vue-contrôleur. Il vous donne le courant de l'orientation de la vue, de ne pas l'orientation du périphérique.

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

5voto

jberry Points 226

J'ai connu la même situation. Plus précisément dans ce flux:

  • Contrôleur 1 charges à dire.. Portrait.
  • Pousser un autre contrôleur sur la pile
  • Alors que dans la 2ème manette, faites pivoter l'appareil orientation Paysage.
  • Posez l'appareil à plat sur une table, et puis revenir pour le contrôleur d'origine.

À ce stade, n'importe quelle orientation vérifie que j'ai vu de retour d'une défaillance de l'orientation de 5, de sorte qu'il n'est pas directement possible de déterminer si un paysage ou portrait doit être utilisé. (Je suis en train de faire la mise en page personnalisée de positionnement par l'orientation de la base, donc c'est important d'informations)

Dans mon cas, une des limites de la largeur de vérifier la vue est utilisée pour déterminer le véritable état des choses, mais j'aimerais savoir si d'autres ont abordé différemment.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X