如何在第一个视图上获取statusBarOrientation

时间:2012-08-29 16:35:49

标签: ios ipad uiinterfaceorientation

如何在第一个视图中检测应用程序的正确方向?我需要知道,所以我可以将肖像图像或风景图像显示为背景。

如果将iPad平放在表面上,

[[UIDevice currentDevice] orientation]将无法正常工作。

statusBarOrientation似乎没有为第一个加载的视图返回正确的结果。我尝试在viewWillAppearviewDidLoad中获取状态栏方向,并且即使处于横向状态,也都返回纵向

我已确认[self.window makeKeyAndVisible]位于AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions interfaceOrientation。这只会在第一个视图控制器上返回错误的状态栏方向。

注意:我还尝试了UIViewController中的[[UIDevice currentDevice] orientation]广告,无论如何,该广告仍会返回肖像。

任何想法如何解决这个问题?

编辑:

我正在使用{{1}}来检测它是纵向还是横向,但我的问题是如果UIDevice返回平面(非纵向或横向)的方向,则检测视图实际是什么。

2 个答案:

答案 0 :(得分:1)

许多应用程序都有此问题。如果设备是扁平的,那么任何方向都是有效的。

最好的办法是使用[[UIDevice currentDevice] orientation]来了解可以确定方向的情况下的方向。但是当它持平时,它就会成为最后一次。

有多少次你看到有人轻弹他们的iPad以正确的方式获得景观定位。

答案 1 :(得分:1)

GOT IT!

我可以使用

进行解决
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

即使在视图加载时,如果方向不是UIInterfaceOrientationPortrait,也会触发此方法。

即使设备是扁平的,似乎有足够长的延迟时间来校正自身并检测UIView是处于纵向还是横向模式。

编辑:

viewDidAppear被触发时,[self interfaceOrientation]具有正确的值。所以,如果你可以等到那个方法,你也可以在那里得到它。