2012-10-08 40 views
3

我有一個應用程序通過MPMoviePlayerViewController來播放視頻,該應用程序在嵌入UITabBarController中的UINavigationController中嵌入的UITableViewController上執行選擇操作後呈現。MPMovieViewController不自動旋轉

的TabBar控制器>導航控制器>表視圖控制器* MPMoviePlayerViewController

一切都按預期在iOS5中,但升級到iOS6的我發現,被提出後,如預期的視頻不旋轉。如果我在目標摘要頁面上選擇了更多受支持的界面方向,則會導致整個應用程序旋轉。

蘋果的文件說,在UIViewController類參考以下內容:

在iOS 6中,您的應用支持在 應用程序的Info.plist文件中定義的接口方向。視圖控制器可以覆蓋 supportedInterfaceOrientations方法以限制支持的 方向的列表。一般來說,系統只會在窗口視圖控制器的根目錄控制器或視圖控制器上顯示填充 整個屏幕;子視圖控制器使用其父視圖控制器爲其提供的窗口部分,並且不再支持 直接參與有關旋轉 支持的決策。應用程序的方向遮罩和視圖控制器的方向遮罩的交集用於確定視圖控制器可以旋轉到哪個方向。

但我不確定何時子視圖控制器實際參與輪換決策。當電影播放時,我需要改變我的標籤欄控制器對shouldAutorotatesupportedInterfaceOrientations的響應方式嗎?

回答

1

基本的答案是,所有視圖控制器的旋轉行爲由「最頂級」視圖控制器決定,但MPMoviePlayerViewController決定了它自己的旋轉行爲,因爲它充當「視圖控制器來呈現整個屏幕」 。

例如:如果我有單視圖應用程序,自動旋轉方法將在視圖控制器上爲單個視圖處理。如果我在標籤欄中嵌入該視圖,那麼標籤欄控制器實現將處理這些消息。如果我將該視圖嵌入到標籤欄內的導航欄中,則標籤欄實現仍然是處理消息的視圖(如果其他視圖控制器嵌入其中,它仍然是「根視圖控制器」)。

MPMoviePlayerViewController將對shouldAutorotate作出迴應並支持風景方向。仍然可以防止電影旋轉(不在目標摘要頁面上選擇縱向),但是您爲視圖控制器層次結構選擇的設置不會影響其執行此操作的能力。當呈現MPMoviePlayerViewController時,視圖控制器處理自動旋轉消息。當它沒有出現時,標籤欄控制器負責。

+0

你是否設法讓MPMoviePlayerViewController旋轉視頻?我已經subclassed MPMoviePlayerViewController並將shouldAutorotate設置爲YES,但我仍然沒有設法讓它旋轉。 –

+1

您不需要子類MPMoviePlayerViewController - 它已將shouldAutorotate設置爲YES。如果您的MPMoviePlayerViewController在展示之後不支持旋轉,那是因爲您的應用程序不支持橫向方向。您可以在您的目標摘要頁面上直接在plist中編輯它,或者在您的AppDelegate中實現應用程序:supportedInterfaceOrientationsForWindow:。 –

+0

是的,事實證明這是我的不好。我在應用程序委託中爲keyWindow添加了子視圖的應用程序,而不是正確設置keyWindow的根視圖控制器。事實證明,這是我的觀點不旋轉的真正罪魁禍首。不管怎麼說,還是要謝謝你! –