当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何以编程方式确定iPhone界面方向?》经验,为你挑选了5个好方法。

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



1> beryllium..:

您可以通过3种方式获得方向:

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

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

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


你是对的.UIDeviceOrientation并不总是UIInterfaceOrientation.
它不是UIInterfaceOrientation,它是 - UIDeviceOrientation,这就是micco在他的帖子中已经提到过的.
在阅读这个答案之前,我一直在使用大量的解决方法,因为我的课程并非都是UIViews ...这非常有效!如果可以的话,我会给这一百万投票给予... ...多谢!@铍

2> 小智..:

在viewcontroller中,您只需使用代码:

UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;

UIInterfaceOrientation是一个枚举:

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


"不要使用此属性(UIViewController.interfaceOrientation)来通知布局决策.而是使用在UIApplication Class Reference中描述的statusBarOrientation属性." 苹果说

3> Chris O'Sull..:

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

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



4> Tibidabo..:

即使状态栏被隐藏,状态栏方向(statusBarOrientation)也始终返回界面方向.

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

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];



5> 小智..:

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

控制器1加载说..肖像.

将另一个控制器推入堆栈

在第二个控制器中,将设备方向旋转到横向.

将设备平放在桌面上,然后弹回原始控制器.

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

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

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有