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

时间:2009-03-11 14:28:52

标签: iphone cocoa-touch

UIDevice.orientation的可能值包括UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown。虽然知道设备是扁平的可能是有用的,但这并不能告诉我们它是否是平面显示面向纵向或横向模式的界面。有没有办法在设备返回模糊信息的情况下找到GUI的当前方向?我想我可以跟踪方向变化事件以记住最后的纵向/横向方向或检查主要UIView的边界高度和宽度,但这似乎是kludgey。设备或UIView上是否有我失踪的财产?

6 个答案:

答案 0 :(得分:95)

您可以通过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。例如,当您的设备在平原上时 表可以获得意想不到的价值。

答案 1 :(得分:92)

在视图控制器中,您只需使用代码:

UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;

UIInterfaceOrientation是一个枚举:

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

答案 2 :(得分:14)

如果您只是关心设备是横向还是纵向,那么viewcontroller上有一些不错的便利方法:

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

答案 3 :(得分:11)

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

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

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

答案 4 :(得分:5)

我见过同样的情况。特别是在这个流程中:

  • 控制器1加载说..肖像。
  • 将另一个控制器推入堆栈
  • 在第二个控制器中,将设备方向旋转为横向。
  • 将设备平放在桌面上,然后弹回原始控制器。

此时,我看过的任何方向检查都会返回5的无效方向,因此无法直接确定是否应使用横向或纵向布局。 (我在每个方向上进行自定义布局定位,因此这是重要的信息)

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

答案 5 :(得分:1)

这是您可能会觉得有用的代码片段:

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