2012-03-29 85 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