如何以编程方式确定iPhone界面的方向?

UIDevice.orientation的可能值包括UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown 。 虽然知道设备是平坦的可能是有用的,但是这并不能告诉我们是否平面显示以纵向或横向模式定向的界面。 在设备返回模糊信息的情况下,有没有办法findGUI的当前方向? 我想我可以跟踪方向更改事件记住最后的肖像/风景方向或检查主UIView的界限的高度和宽度,但似乎kludgey。 设备上有没有属性或UIView,我错过了?

在视图控制器中,您可以简单地使用代码:

 UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation; 

UIInterfaceOrientation是一个枚举:

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

你可以通过3种方式获得定位:

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

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

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

如果你只是在意设备是横向还是纵向,那么在视图控制器上有一些很好的方便方法:

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

状态栏方向 (statusBarOrientation) 始终返回界面方向,即使状态栏已隐藏。

您可以在没有视图控制器的情况下使用状态栏方向。 它给你当前的视图方向,而不是设备的方向。

 UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 

我见过同样的情况。 具体在这个stream程中:

  • 控制器1载入说…肖像。
  • 将另一个控制器推入堆栈
  • 在第二个控制器中,将设备方向旋转到横向。
  • 将设备平放在桌子上,然后弹回原来的控制器。

此时,我所看到的任何方向检查都会返回5的无效方向,因此无法直接确定是否应使用横向或纵向布局。 (我正在做一个定位的基础上定制布局定位,所以这是重要的信息)

就我而言,视图上的边界宽度检查用于确定事物的真实状态,但是我想知道其他人是否有不同的处理方式。

这里有一个你可能会觉得有用的codesnippet:

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