iOS6的旋屏控制技巧 – iPhone手機開發技術文章 iPhone軟體開發教學課程

在iOS5.1 和 之前的版本中, 我們通常利用 shouldAutorotateToInterfaceOrientation: 來單獨控制某個UIViewController的旋屏方向支持,比如:

  1. – (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

  2. {

  3. return (interfaceOrientation == UIInterfaceOrientationPortrait);

  4. }

    但是在iOS6中,這個方法被廢棄瞭,使用無效。

    shouldAutorotateToInterfaceOrientation:

    Returns a Boolean value indicating whether the view controller supports the specified orientation. (Deprecated in iOS 6.0. Override the supportedInterfaceOrientations andpreferredInterfaceOrientationForPresentation methods
    instead.)

    實踐後會發現,通過supportedInterfaceOrientations的單獨控制是無法鎖定屏幕的。

    1. -(NSUInteger)supportedInterfaceOrientations

    2. {

    3. return UIInterfaceOrientationMaskPortrait;

    4. }

      多次實驗後總結出控制屏幕旋轉支持方向的方法如下:

      子類化UINavigationController,增加方法

      1. – (BOOL)shouldAutorotate

      2. {

      3. return self.topViewController.shouldAutorotate;

      4. }

      5. – (NSUInteger)supportedInterfaceOrientations

      6. {

      7. return self.topViewController.supportedInterfaceOrientations;

      8. }

        並且設定其為程序入口,或指定為 self.window.rootViewController

        隨後添加自己的view controller,如果想禁止某個view controller的旋屏:(支持全部版本的控制)

        1. – (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

        2. {

        3. return (interfaceOrientation == UIInterfaceOrientationPortrait);

        4. }

        5. -(BOOL)shouldAutorotate

        6. {

        7. return NO;

        8. }

        9. -(NSUInteger)supportedInterfaceOrientations

        10. {

        11. return UIInterfaceOrientationMaskPortrait;

        12. }

          如果想又開啟某個view controller的全部方向旋屏支持:

          1. – (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

          2. {

          3. return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

          4. }

          5. -(NSUInteger)supportedInterfaceOrientations

          6. {

          7. return UIInterfaceOrientationMaskAllButUpsideDown;

          8. }

          9. -(BOOL)shouldAutorotate

          10. {

          11. return YES;

          12. }

            從而實現瞭對每個view controller的單獨控制。


            順便提一下,如果整個應用所有view controller都不支持旋屏,那麼幹脆:

            1. – (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window

            2. {

            3. return UIInterfaceOrientationMaskPortrait;

            4. }

發佈留言