2010-10-10 60 views
10

当扁平我有以下代码:iPad的推出方向上表面

-(void)viewWillAppear:(BOOL)animated { 

    UIDeviceOrientation orientation = [[UIDevice currentDevice] UIInterface]; 

    if(orientation==UIDeviceOrientationLandscapeLeft || orientation==UIDeviceOrientationLandscapeRight) { 
     NSLog(@"Device Landscape"); 
    } else { 
     NSLog(@"Device Portrait"); 
    } 

} 

这工作完全为模拟器和在设备上,但只有当iPad是在表面上不平坦的,例如,如果我躺在桌子上的iPad并加载视图时会显示其肖像,因此当视图出现时我无法检测到方向。

当viewWillAppear被调用时检测界面方向的最佳方法的任何想法?

感谢

+0

好代码,你希望你的应用程序做的,如果iPad是事实上朝上? – 2010-10-10 17:56:45

+0

当设备放平时,他想知道是否显示横向或纵向视图。 – Emil 2010-10-10 18:21:10

+0

我有一个子视图,这是显示在不同的地方,如果视图是风景/肖像。所以我需要知道viewAppears时界面的方向。 – Steve 2010-10-10 19:04:07

回答

26

您应该使用[self interfaceOrientation],而不是设备的方向。

0

首先,你知道UIViewController的interfaceOrientation属性吗?它看起来像你试图复制它。如果你真的想这样做,只需订阅设备方向更改通知,检查新的方向是否是有效的接口方向(该宏是一个宏),如果是,则将该值存储到某个变量(如lastSeenOrientation)。那么你可以依赖于任何你想要的价值。

8

[[UIApplication sharedApplication] statusBarOrientation]也适用,如果你在某处不访问[self interfaceOrientation]

+0

+1,真的很好用,谢谢! – 2011-09-24 13:37:55