iphone - nouveautés - ios 12 sortie




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

Les valeurs possibles pour UIDevice.orientation incluent UIDeviceOrientationFaceUp et UIDeviceOrientationFaceDown . Bien qu'il puisse être utile de savoir que l'appareil est plat, cela ne nous dit pas si c'est un écran plat affichant une interface orientée en mode portrait ou paysage. Est-il possible de trouver l'orientation actuelle de l'interface graphique dans les cas où l'appareil renvoie des informations ambiguës? Je suppose que je pourrais suivre les événements de changement d'orientation pour me souvenir de la dernière orientation portrait / paysage ou vérifier la hauteur et la largeur des limites de l'UIView principal, mais cela semble kludgey. Y a-t-il une propriété sur l'appareil ou UIView qui me manque?


Dans un viewcontroller vous pouvez simplement utiliser le code:

UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;

L'UIInterfaceOrientation est une énumération:

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

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

  • Le contrôleur 1 charge en disant .. Portrait.
  • Poussez un autre contrôleur sur la pile
  • Dans le 2ème contrôleur, faites pivoter l'orientation de l'appareil vers Paysage.
  • Posez l'appareil à plat sur une table, puis revenez au contrôleur d'origine.

À ce stade, toutes les vérifications d'orientation que j'ai vues retournent une orientation invalide de 5, il n'est donc pas directement possible de déterminer si une mise en page paysage ou portrait doit être utilisée. (Je fais le positionnement de mise en page personnalisé sur une base par-orientation, donc ce sont des informations importantes)

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


Voici un code codes que vous pourriez trouver utile:

UIInterfaceOrientation  orientation = [UIDevice currentDevice].orientation;
NSLog( @" ORIENTATION: %@", UIInterfaceOrientationIsLandscape( orientation ) ? @"LANDSCAPE" : @"PORTRAIT");

Vous pouvez obtenir une orientation de 3 façons:

  1. UIInterfaceOrientation orientation = self.interfaceOrientation; renvoie UIInterfaceOrientation, orientation actuelle de l'interface. C'est une propriété dans UIViewController, vous pouvez accéder à celui-ci uniquement dans les classes UIViewController .

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

  3. UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; renvoie UIDeviceOrientation , orientation du périphérique. Vous pouvez accéder à cette 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 table simple, vous pouvez recevoir une valeur inattendue.





cocoa-touch