2015年10月12日 星期一

螢幕的轉向

螢幕的轉向

要設定app支援的轉向,有兩個要素。分別是”裝置”與”View Controller”。兩者設定的交集,才是真正最後能呈現的轉向。

裝置支援的方向
要設定裝置所支援的方向,只要在專案Device Orientation勾選要支援的方向。 



其所修改後,其實是對應到Info.plist中,Supported interface orientations的設定。 




View Controller 支援的方向
View Controller以呈現類型,大致上有三種。分別是UINavigationController, UITabBarController與的UIViewController。

  • UINavigationController

若以UINavigationController管理多個UIViewController,則以UINavigationController統一管理支援的方向。
  • UITabBarController

若以UITabBarController管理多個UIViewController,則以UITabBarController統一管理支援的方向。
  • UIViewController

單獨的UIViewController則自己處理支援的方向。若前面UINavigationController或UITabBarController以presentViewController方式呈獻UIViewController,則此UIViewController不受UINavigationController或UITabBarController所管理。

從iOS 7到目前的iOS9有兩個method要去實作,分別表示
  • shouldAutorotate() -> Bool :表示是否支援轉向
  • supportedInterfaceOrientations() -> UIInterfaceOrientationMask :列出所支援的轉向


說明
若裝置支援的方向勾選Portrait, Landscape Left, Landscape Right。用如下支援轉向的method寫在不同地方做說明。

    override func shouldAutorotate() -> Bool {
        return true
    }

    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return [.Portrait]
    }

  • 使用UINavigationController,但支援轉向的method寫在其中的一個UIViewController中。進行轉向的結果如下。可以看出已被轉向。表示method限制只支援Portrait的設定無作用。


  • 使用UINavigationController,但新增繼承UINavigationController的Class,將支援轉向的method寫在裡面。並使用這個新增的class管理Navigation。可以看得出來,轉向被限制在Portrait有起作用。


有興趣可以動手對UITabBarController做一樣的嘗試。可以發現,原來UINavigationController與UITabBarController除了管理UIViewController之外,還負責轉向的支援。