2010-06-01 53 views
6

面向iPad應用橫向方向啓動應用程序時出現一個問題。 我開發了iPhone應用程序,後來我移植到iPad。以橫向方式啓動iPad應用程序

我已經設定關於info.plist中

[ UISupportedInterfaceOrientations~ipad ] to support all orientation UIInterfaceOrientationPortrait , UIInterfaceOrientationPortraitUpsideDown , UIInterfaceOrientationLandscapeLeft , UIInterfaceOrientationLandscapeRight. 

方向,但是當我開始在風景模式iPad應用,它總是在potrait模式啓動。

沿着這

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

{ return YES; } 

幫助我,如果我缺少這個東西..

感謝,

薩加爾

+0

如果您正在定義對所有方向的支持,那麼您的視圖將與您的設備處於相同的模式。即,如果您的設備處於肖像模式,那麼您的視圖將以縱向模式顯示。更改設備方向也會改變視圖方向。 – Jim 2010-06-01 06:12:41

+0

感謝Jim的回覆..但是當方向處於橫向模式時,我開始應用...它仍然以縱向模式開始(即按照主頁按鈕的方向)。我需要在開始時實現正確的定位,因爲需要顯示橫向屏幕或縱向屏幕。 – 2010-06-02 05:40:42

回答

5

薩格爾 - 我有同樣的問題,但能夠解決它。

與您的一樣,我的應用程序作爲iPhone應用程序啓動,我使用XCode嚮導「升級」爲通用應用程序。我注意到,當在實際的iPad上運行時,從橫向開始,應用程序將以縱向開始,然後可能旋轉到橫向。在模擬器上,從橫向開始,應用程序將從橫向開始,然後模擬器將旋轉到縱向。

在iPad上,我的應用程序是一個帶有左右TabBarControllers的分割視圖應用程序。每個選項卡都是返回YES到shouldAutoRotateToInterfaceOrientation的視圖控制器。

我注意到一個全新的嚮導生成的簡單案例與splitviewcontroller通用應用程序沒有這個問題。

我在應用程序和簡單案例中發現的區別是我沒有將我的splitview控制器的視圖添加到applicationDidFinishLaunchingWithOptions中的應用程序窗口。相反,我在這個階段顯示了一個「加載」視圖,然後當初始化線程完成時,我會添加我的splitviewcontroller的視圖(並隱藏「加載」視圖)。

當我在調用applicationDidFinishLaunchingWithOptions的過程中將我的splitviewcontroller的視圖添加到應用程序窗口時,一切都開始正常工作。

從applicationDidFinishLaunchingWithOptions返回時必定會發生一些魔力?

您的應用與我的類似,因爲它在applicationDidFinishLaunchingWithOptions期間沒有將主視圖控制器的視圖添加到窗口中?

+0

Hi TomSwift。謝謝你的回覆..我已經實現了同樣的方式,正如你所描述的那樣。在applicationDidFinishLaunchingWithOptions我不添加主窗口/ infact我添加啓動畫面,並在此之後添加splitview。 – 2010-06-07 06:28:46

+0

那麼,如果添加主窗口而不是啓動畫面,會發生什麼情況?它是否自行修復? – TomSwift 2010-06-10 04:17:05

+0

看到它似乎解決方案,這是在應用程序dfinfinishlauching讓我們開始默認的用戶界面[在我的情況下飛濺scree],並在那之後檢測方向和做視圖渲染.... – 2010-06-14 14:02:23

9

將UISupportedInterfaceOrientations放入-Info.plist中,併爲您支持的每個方向設置。這用於查看應用程序可以啓動的方向。從那裏開始,它會詢問您的視圖控制器。

+0

感謝David回覆。是的設置在info.plist中實現。 – 2010-08-25 12:21:07

10

這裏還有一些我也發現:如果你在第一個插槽中設置了另一個方向支持的接口方向,那麼在你的info.plist中設置初始接口方向將被忽略!把你的初始定位放在那裏 - 模擬器將正確啓動,應用程序也一樣。這讓我瘋狂了很久!

+0

正是我在找... – RVN 2012-02-14 15:15:53

1

正如許多帖子中指出的那樣,您必須設置info.plist的支持和初始界面方向。然而,更大的問題是初始定位何時生效?答案是,當你的視圖控制器收到「viewDidLoad」消息。我發現,在運行iOS 5.0的iPad-1上,只有在接收到多條「shouldAutorotateToInterfaceOrientation」 消息(此消息將UIInterfaceOrientation參數傳遞給接收方)後,請求的初始方向纔會生效。此外,即使方向表示它處於風景模式,可能不是!我發現確保視圖處於橫向模式的唯一方法是測試視圖高度小於視圖寬度。 對我而言,策略是在收到「viewDidLoad」消息時佈置我想要的子視圖,但實際上是延遲將這些子視圖添加到視圖中,直到控制器收到有效的「shouldAutorotate ..」消息並且其方向設置爲風景模式。代碼看起來像這樣:

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
// Return YES for supported orientations 

// N.B. Even when the interface orientation indicates landscape mode 
// this may not really be true. So we insure this is so by testing 
// that the height of the view is less than the width 
if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
    interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
{ 
    CGRect viewBounds = [[self view] bounds]; 
    if (viewBounds.size.height < viewBounds.size.width) 
     [self addMySubViews]; 
    return YES; 
} 
else 
    return NO; 
} 

蘋果剛剛發佈的iOS 5.1,所以這種行爲可能已經改變。但我希望這裏的代碼仍然可以工作。

相關問題