2012-03-29 46 views
1

我有可以在纵向或横向模式下启动的应用程序。主屏幕上的控件看起来不同,具体取决于应用程序的模式。iPad在启动时无法识别正确的界面方向?

这是问题 - 如果我在横向模式下启动应用程序,控件不在应该出现的位置,它们保留自己的位置,如应用程序是纵向模式。我试图测试这一点,这里是我发现 -

在viewDidLoad和ViewWillappear我得到的信息,应用程序是在肖像模式,虽然应用程序是横向模式。鉴于确实出现了它被设置为正确的价值 - 景观模式。问题是我希望这些组件被设置在适当的位置,在视图出现之前(如果我不能清楚地看到它们在屏幕上重新定位)。

什么是正确的方法来处理?

编辑: 在viewDidLoad中和viewWillAppear中,我把这:

orientation = [self getOrientation]; 
if (orientation == OrientationsLandscape) { 
    NSLog(@"Landscape"); 
} 
else { 
    NSLog(@"Portrait"); 
} 

这里是实现[getOrientation]

- (int) getOrientation { 
    int currentOrientation = [UIApplication sharedApplication].statusBarOrientation; 
    if (UIInterfaceOrientationIsPortrait(currentOrientation)) return OrientationsPortrait; 
    else return OrientationsLandscape; 
} 

和枚举DEF:

typedef enum { 
    OrientationsLandscape = 0, 
    OrientationsPortrait 
} Orientations; 

现在,如果设备是横向模式,我尝试安装我的应用程序,我会得到2次印有“人像”,而不是“风景”

+0

我有同样的问题,但只有当设备面朝上。如果我将它放在手中,倾斜,则可以识别方向。如果我调用初始化后进行测试的计时器,它就可以工作。但是在applicationDidFinishLaunching和我的计时器调用之间,我有一个简短的白色屏幕......你找到了解决方案吗? – Martin 2012-12-07 09:45:08

+0

我在这里发布了解决方案:http://stackoverflow.com/a/13763842/127493 – Martin 2012-12-07 13:17:07

回答

1

试试这个:

[UIApplication sharedApplication].statusBarOrientation 
+0

我已经使用它来找出正确的界面方向,但因为我伤心它的错误方向。 – MegaManX 2012-03-29 14:16:54

+0

所以试试这个[UIDevice currentDevice] .orientation。其中一个总是显示正确的方向。 – SVGreg 2012-03-29 15:06:36

+0

[UIDevice currentDevice] .orientation对此用法不正确,您必须使用[UIApplication sharedApplication] .statusBarOrientation – Fry 2012-03-29 15:09:32

0

同样重要的是,确保你已经正确设置你的所有UI元素的autoresizingMask财产。 其次,当我遇到这个问题时,我在init方法中修复了它。在init中,你应该像SVGreg建议的那样控制iPad的方向,并且为你的UI元素设置正确的框架。

+0

在init方法中,无法知道用户界面方向是什么。您可以根据设备方向猜测方向,但是如果用户锁定方向,问题是什么 - 这就是为什么应该使用界面方向。 – MegaManX 2012-03-29 15:26:45

+0

默认方向被认为是纵向。如果方向为“纵向”,则不会发生任何反应,而是调用“横向”旋转方法中的方向。 – Fry 2012-05-04 15:40:13