UIDevice.orientation
include UIDeviceOrientationFaceUp
和 的可能值UIDeviceOrientationFaceDown
.虽然知道设备是扁平的可能是有用的,但这并不能告诉我们它是否是平面显示面向纵向或横向模式的界面.有没有办法在设备返回模糊信息的情况下找到GUI的当前方向?我想我可以跟踪方向变化事件以记住最后的纵向/横向方向或检查主要UIView的边界高度和宽度,但这似乎是kludgey.设备或UIView上有一个我失踪的财产吗?
您可以通过3种方式获得方向:
UIInterfaceOrientation orientation = self.interfaceOrientation;
返回UIInterfaceOrientation,接口的当前方向.它是UIViewController中的一个属性,只能在UIViewController类中访问它.
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
返回UIInterfaceOrientation,即应用程序状态栏的当前方向.您可以在应用程序的任何位置访问该属性.我的经验表明,这是检索真实界面方向的最有效方法.
UIDeviceOrientation orientation = [[UIDevice currentDevice]
orientation];
返回UIDeviceOrientation,设备方向.您可以在应用程序的任何位置访问该属性.但请注意,UIDeviceOrientation并不总是UIInterfaceOrientation.例如,当您的设备位于普通表上时,您可以获得意外的价值.
在viewcontroller中,您只需使用代码:
UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;
UIInterfaceOrientation是一个枚举:
typedef enum { UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeRight } UIInterfaceOrientation;
如果您只关心设备是横向还是纵向,那么viewcontroller上有一些不错的便利方法:
UIDeviceOrientationIsLandscape(self.interfaceOrientation) UIDeviceOrientationIsPortrait(self.interfaceOrientation)
即使状态栏被隐藏,状态栏方向(statusBarOrientation)也始终返回界面方向.
您可以在没有视图控制器的情况下使用状态栏方向.它为您提供当前的视图方向,而不是设备方向.
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
我见过同样的情况.特别是在这个流程中:
控制器1加载说..肖像.
将另一个控制器推入堆栈
在第二个控制器中,将设备方向旋转到横向.
将设备平放在桌面上,然后弹回原始控制器.
此时,我看到的任何方向检查都返回5的无效方向,因此无法直接确定是否应使用横向或纵向布局.(我在每个方向上进行自定义布局定位,所以这是重要的信息)
在我的例子中,视图的边界宽度检查用于确定事物的真实状态,但我很想知道其他人是否有不同的处理方式.