如何以编程方式确定iPhone界面的方向?
UIDevice.orientation
的可能值包括UIDeviceOrientationFaceUp
和UIDeviceOrientationFaceDown
。 虽然知道设备是平坦的可能是有用的,但是这并不能告诉我们是否平面显示以纵向或横向模式定向的界面。 在设备返回模糊信息的情况下,有没有办法findGUI的当前方向? 我想我可以跟踪方向更改事件记住最后的肖像/风景方向或检查主UIView的界限的高度和宽度,但似乎kludgey。 设备上有没有属性或UIView,我错过了?
在视图控制器中,您可以简单地使用代码:
UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;
UIInterfaceOrientation是一个枚举:
typedef enum { UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeRight } UIInterfaceOrientation;
你可以通过3种方式获得定位:
-
UIInterfaceOrientation orientation = self.interfaceOrientation;
返回UIInterfaceOrientation,接口的当前方向。 它是UIViewController中的一个属性, 只能在UIViewController类中访问这个属性。 -
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
返回UIInterfaceOrientation,应用程序状态栏的当前方向。 您可以在应用程序的任何位置访问该属性。 我的经验表明,这是检索真实界面方向的最有效的方法 。 -
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");