iOS中指定页面可旋转

作者: BWLi420 | 来源:发表于2019-11-07 15:47 被阅读0次
    • 针对项目中整体竖屏显示,某页面需要旋转的场景,解决方案如下:

    1. 设置项目支持方向

    • 仅勾选竖屏
    image.png

    2. AppDelegate中添加一个属性,记录是否允许旋转

    /// 是否允许旋转
    @property (assign, nonatomic) BOOL allow;
    
    • 实现 supportedInterfaceOrientationsForWindow 方法
    //根据设置调整支持方向
    - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
        if (self.allow) {
            return UIInterfaceOrientationMaskAllButUpsideDown;
        }
        return UIInterfaceOrientationMaskPortrait;
    }
    

    3. 创建控制器基类,便于操作

    • 创建控制器时应继承于基类
    • 在基类中实现以下方法
    //基类:默认不支持旋转
    - (BOOL)shouldAutorotate {
        return NO;
    }
    
    //默认支持方向
    - (UIInterfaceOrientationMask)supportedInterfaceOrientations {
        return UIInterfaceOrientationMaskPortrait;
    }
    

    4. 针对项目架构 TabBarController + NavigationController

    • 在自定义的 NavigationController 中设置跟随控制器的设置
    //跟随当前显示控制器的设置
    - (BOOL)shouldAutorotate {
        return self.topViewController.shouldAutorotate;
    }
    
    • 在自定义的 TabBarController 中设置跟随选中导航控制器的设置
    //跟随当前导航控制器的设置
    - (BOOL)shouldAutorotate {
        return self.selectedViewController.shouldAutorotate;
    }
    

    5. 在想要旋转的控制器中实现以下方法

    • 导入 AppDelegate
    //打开允许旋转
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        
        ((AppDelegate *)[[UIApplication sharedApplication] delegate]).allow = YES;
    }
    
    //关闭允许旋转
    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        
        ((AppDelegate *)[[UIApplication sharedApplication] delegate]).allow = NO;
    }
    
    //支持旋转
    - (BOOL)shouldAutorotate {
        return YES;
    }
    
    

    至此,已实现以上需求。

    完整Demo已上传,点击这里查看 ScreenRotationDemo

    相关文章

      网友评论

        本文标题:iOS中指定页面可旋转

        本文链接:https://www.haomeiwen.com/subject/rjsvbctx.html