1

我需要在 UIViewController 的 viewWillAppear 方法中获取界面方向。我所做的是:

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

在横向时,我总是在 viewWillAppear 中获得肖像,在 viewDidAppear 中获得横向。为什么?

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

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

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

这个问题有什么解决办法吗?

4

2 回答 2

0

请改用 [UIApplication sharedApplication].statusBarOrientation。

if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    // Portrait
}
if( [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight){
    // Landscape
}
于 2012-07-04T08:41:43.803 回答
0

JasonCoco 的第一条评论是我发现的这个问题的最佳解决方案。

于 2012-10-26T17:46:01.893 回答