获取当前界面方向的不同方法?

问题描述:

是有3种方式来获得当前界面的方向,我知道:获取当前界面方向的不同方法?

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

什么是它们之间的区别是什么?

self.interfaceOrientation返回接口的当前方向UIInterfaceOrientation。它是UIViewController中的一个属性,您只能在UIViewController类中访问这个属性。

[[UIApplication sharedApplication] statusBarOrientation]返回UIInterfaceOrientation,应用程序状态栏的当前方向。您可以在应用程序的任何位置访问该属性。我的经验表明,它是检索真实界面方向的更有效方法。

[[UIDevice currentDevice] orientation]返回UIDeviceOrientation,设备方向。您可以在应用程序的任何位置访问该属性。但请注意,UIDeviceOrientation并不总是UIInterfaceOrientation。例如,当您的设备在普通桌面上时,您可能会收到意外的值。

+0

谢谢,我现在很清楚! –

+1

关于界面方向的一个更多答案 - http://*.com/a/3897243/194544 – beryllium

+0

+1,非常好的解释:)) – mAc

[[UIApplication sharedApplication] statusBarOrientation] - 它总是等于四个值之一:纵向,左侧风景,右侧风景和上下颠倒。

[[UIDevice currentDevice] orientation] - 这一个等于标准的四个值,也是:未知的,正面朝上或正面朝下。

[[UIApplication sharedApplication] statusBarOrientation] - 更喜欢获取界面方向的方法。

+0

此外,'[[的UIDevice currentDevice] orientation]'“...总是返回0,除非已经通过调用beginGeneratingDeviceOrientationNotifications启用了方向通知。” (Docs。) – Olie

+8

12偏头痛和5溃疡后,我可以证实'[[UIApplication sharedApplication] statusBarOrientation]'是一种更可靠和简单的检测和管理方向变化的方法。 –

所有视图控制器有此功能

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

或可以用户状态栏取向

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

作品在IOS 9 :)