Различные способы получения текущей ориентации интерфейса?

Есть 3 способа получить текущую ориентацию интерфейса, о которой я знаю:

  • self.interfaceOrientation
  • [[UIApplication sharedApplication] statusBarOrientation]
  • [[UIDevice currentDevice] orientation]

Каковы различия между ними?

Ответ 1

self.interfaceOrientation возвращает UIInterfaceOrientation, текущую ориентацию интерфейса. Это свойство в UIViewController, вы можете получить доступ к этому только в классах UIViewController.

[[UIApplication sharedApplication] statusBarOrientation] возвращает UIInterfaceOrientation, текущую ориентацию строки состояния приложения. Вы можете получить доступ к этому свойству в любой точке вашего приложения. Мой опыт показывает, что это более эффективный способ получить реальную ориентацию интерфейса.

[[UIDevice currentDevice] orientation] возвращает UIDeviceOrientation ориентацию устройства. Вы можете получить доступ к этому свойству в любой точке вашего приложения. Но обратите внимание, что UIDeviceOrientation не всегда является UIInterfaceOrientation. Например, когда ваше устройство находится на простой таблице, вы можете получить неожиданное значение.

Ответ 2

[[UIApplication sharedApplication] statusBarOrientation] - он всегда равен одному из четырех значений: портрет, пейзаж слева, пейзаж справа и портрет вверх ногами.

[[UIDevice currentDevice] orientation] - этот показатель равен стандартным четырем значениям, а также: неизвестно, вверх или вниз.

[[UIApplication sharedApplication] statusBarOrientation] - более предпочтительный способ получить ориентацию интерфейса.

Ответ 3

Все контроллеры представлений имеют эту функцию

   override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) {
          //fromInterfaceOrientation.isLandscape
   }

или вы можете указать ориентацию строки состояния

   if UIApplication.sharedApplication().statusBarOrientation == UIInterfaceOrientation.Portrait {
        //
   }

Работает в iOS 9:)