在viewWillAppear中获取设备界面方向

时间:2012-07-04 08:36:40

标签: ios uiviewcontroller uiinterfaceorientation

我需要在我的UIViewController的viewWillAppear方法中获取接口方向。我做的是:

if (self.interfaceOrientation == UIInterfaceOrientationPortrait)
   NSLog(@"Portrait");
else
   NSLog(@"Landscape");

在横向拍摄时,我总是在viewDillAppear中获取Portrait并在viewDidAppear中获得Landscape。为什么呢?

所以,我尝试使用[[UIApplication sharedApplication] statusBarOrientation],但同样的情况也是如此。我还尝试了在Stack Overflow中发布的另一个解决方案:

UIDevice* device = [UIDevice currentDevice];
[device beginGeneratingDeviceOrientationNotifications];
UIDeviceOrientation currentOrientation = device.orientation;
[device endGeneratingDeviceOrientationNotifications];

这似乎正确地返回了方向,但是现在我留下了将UIDeviceOrientation映射到UIInterfaceOrientation的问题,据我所知这是不可能的(面朝上和面朝下都无法映射)。

此问题的任何解决方案?

2 个答案:

答案 0 :(得分:0)

使用[UIApplication sharedApplication] .statusBarOrientation代替。

if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    // Portrait
}
if( [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight){
    // Landscape
}

答案 1 :(得分:0)

JasonCoco的第一个评论是我在这个问题上找到的最佳解决方案。