1

我很難讓我的應用程序正確支持所有的方向。 問題在於啓動。我已經做了以下步驟:iPad初始定位

  1. 補充:

    <key>UISupportedInterfaceOrientations</key> 
    <array> 
        <string>UIInterfaceOrientationPortraitUpsideDown</string> 
        <string>UIInterfaceOrientationLandscapeLeft</string> 
        <string>UIInterfaceOrientationLandscapeRight</string> 
        <string>UIInterfaceOrientationPortrait</string> 
    </array> 
    
  2. 確信,我的所有視圖控制器始終shouldAutorotateToInterfaceOrientation返回YES
  3. 添加所有默認*圖像

在風景中 - 應用程序開始顯示正確的默認圖像,但實際應用程序以縱向開始。不會調用willRotate ...和shouldAutorotate ..方法。

我甚至試過(從WordPress的)的混寫方法:

+ (void)youWillAutorotateOrYouWillDieMrBond { 
    NSLog(@"youWillAutorotateOrYouWillDieMrBond"); 
    Swizzle([NSClassFromString(@"UISplitViewController") class], @selector(shouldAutorotateToInterfaceOrientation:), @selector(MyShouldAutorotateToInterfaceOrientation:), NULL); 
    Swizzle([NSClassFromString(@"UIViewController") class], @selector(shouldAutorotateToInterfaceOrientation:), @selector(MyShouldAutorotateToInterfaceOrientation:), NULL); 
} 

- (BOOL)MyShouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    NSLog(@"MyShouldAutorotateToInterfaceOrientation (%@)", self); 
    return(YES); 
} 
沒有運氣

也。無論我做什麼 - 如果設備處於橫向模式,該應用程序將以肖像開始。

我已閱讀相應的Apple文檔 - 他們說應用程序總是以縱向開始,但如果VC支持方向,則會自行旋轉。所以,我似乎正在盡我所能...

真的出於這裏的想法,將不勝感激任何見解。

+0

它應該工作(並且它適用於我的項目)。啓動時的視圖層次結構究竟是什麼樣的? – Anomie 2011-05-08 12:31:08

+0

這是一個由iPad模板構建的標準應用程序,我有一個分割視圖控制器,所以在啓動時顯示vc細節,並在工具欄上打開主vc。 – reflog 2011-05-08 12:51:07

回答

4

好的,感謝所有幫助過的人,但它不是建議的解決方案之一: 似乎我偶然發現了一些iPAD的bug。

解決辦法很簡單:

母版視圖沒有收到任何事件,出於某種原因,這是問題所在。我所做的是將UIViewController包裝在UINavigationController中並將其設置爲Master。然後導航控制器DID接收事件並將其傳遞。問題解決了!

+0

仍然有這個問題,只有這個答案解決了它。這是一個愚蠢的問題! – marzapower 2013-03-26 11:00:26

0

這可能是您的筆尖安裝在錯誤模式下的問題。您可以將筆尖的開始位置更改爲橫向或肖像。我發現這比使用視圖控制器更容易。

要做到這一點去界面生成器,選擇視圖。在「查看屬性」窗口中選擇最左邊的選項卡,然後將方向更改爲橫向。

+0

NIB中的定位(據我所知)僅用於設計目的。無論如何 - 設置它並沒有幫助,而且我還想繼續支持Portrait。這對我來說不是一個正確的解決方案。 – reflog 2011-05-05 20:50:00

0

首先,檢查你有四個UISupportedInterfaceOrientations到您的info.plist

其次,檢查您要添加的拆分視圖的應用程序窗口(如:[self.window addSubview:splitViewController.view];)在應用程序委託的applicationDidFinishLaunchingWithOptions,並且不晚,這可能會導致此問題。

或者,UIWindow只能可靠地將旋轉傳遞給添加到窗口的第一個視圖的視圖控制器。取決於你如何做你的分割視圖控制器,這可能是問題。確保您需要正確旋轉的任何視圖都位於子視圖層次結構中,無論視圖添加到窗口的第一個視圖是什麼,以便視圖控制器可以正確地向下傳遞旋轉事件。

希望有幫助!

+0

正如問題所述 - 所有方向都在plist文件中提供。關於添加拆分視圖 - 它是從MainWindow.xib啓動的,所以它在DidFinish之前啓動。 – reflog 2011-05-09 04:07:48

0

如果您無法解決問題,請嘗試將其添加到Info.plist文件中。這對我的作品在我的普及應用:

<key>UISupportedInterfaceOrientations~ipad</key> 
<array> 
    <string>UIInterfaceOrientationPortrait</string> 
    <string>UIInterfaceOrientationPortraitUpsideDown</string> 
    <string>UIInterfaceOrientationLandscapeLeft</string> 
    <string>UIInterfaceOrientationLandscapeRight</string> 
</array> 

的此不同的是,你強迫這些屬性是iPad專用通過~ipad片段。

如果你想強加於推出的應用程序的方向,你應該嘗試更新applicationDidFinishLaunching:方法添加這個,給力方向的變化通知:

UIDevice *device = [UIDevice currentDevice]; 
[device beginGeneratingDeviceOrientationNotifications]; 

希望這有助於。

如果這不起作用,它可能是與您的應用程序的初始化有關的問題,即您創建UISplitViewController的方式,並將邊和細節控制器添加到它。在這種情況下,請過去那段代碼。

+0

感謝您的建議,我嘗試了〜ipad版本,不幸的是 - 沒有骰子,沒有幫助。此外,我的應用程序是從MainWindow.xib構建的,因此分割視圖未從代碼 – reflog 2011-05-10 09:55:26

+0

初始化。如果您將設備橫向放置,它將從縱向開始並永遠不會旋轉? – marzapower 2011-05-10 10:01:00

+0

它以縱向開始,但如果我移動設備將會旋轉。主要問題是showAutoRotate沒有在應用程序啓動時調用(因爲我認爲它應該),它只是在我物理移動設備時才調用。 – reflog 2011-05-10 10:09:53