zoukankan      html  css  js  c++  java
  • iOS6的旋屏控制技巧

    在iOS5.1 和 之前的版本中, 我们通常利用 shouldAutorotateToInterfaceOrientation: 来单独控制某个UIViewController的旋屏方向支持,比如:

     

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }



    但是在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的单独控制是无法锁定屏幕的。

    -(NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskPortrait;
    }



    多次实验后总结出控制屏幕旋转支持方向的方法如下:

    子类化UINavigationController,增加方法

     

    - (BOOL)shouldAutorotate
    {
        return self.topViewController.shouldAutorotate;
    }
    
    - (NSUInteger)supportedInterfaceOrientations
    {
        return self.topViewController.supportedInterfaceOrientations;
    }
    


    并且设定其为程序入口,或指定为 self.window.rootViewController

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

     

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }
    
    -(BOOL)shouldAutorotate
    {
        return NO;
    }
    
    -(NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskPortrait;
    }

     

     

    如果想又开启某个view controller的全部方向旋屏支持:

     

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    }
    
    -(NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
    
    -(BOOL)shouldAutorotate
    {
        return YES;
    }



    从而实现了对每个view controller的单独控制。


    顺便提一下,如果整个应用所有view controller都不支持旋屏,那么干脆:

     

    - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
    {
         return UIInterfaceOrientationMaskPortrait;
    }
  • 相关阅读:
    背水一战 Windows 10 (90)
    背水一战 Windows 10 (89)
    背水一战 Windows 10 (88)
    背水一战 Windows 10 (87)
    背水一战 Windows 10 (86)
    背水一战 Windows 10 (85)
    背水一战 Windows 10 (84)
    背水一战 Windows 10 (83)
    背水一战 Windows 10 (82)
    背水一战 Windows 10 (81)
  • 原文地址:https://www.cnblogs.com/iOSJason/p/4134487.html
Copyright © 2011-2022 走看看