iOS中指定页面可旋转

  • 针对项目中整体竖屏显示,某页面需要旋转的场景,解决方案如下:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 一、最让人纠结的三种枚举 二、两种屏幕旋转的触发方式 三、屏幕旋转控制的优先级 四、开启屏幕旋转的全局权限 ...
    来闹的阅读 2,961评论 0 4
  • 代码创建UIWindow对象 Xcode7之后使用代码创建UIWindow对象: //创建UIWindow对象 s...
    云之君兮鹏阅读 1,370评论 0 2
  • 0610 1.事情的拖延,除了惰性,也是自己思维固化与局限的表现。应该以自然,以天地为师,认识到事物本有序。才能按...
    谋动阅读 217评论 0 0
  • 熊志军~【日精进打卡第1157天】 沈阳眼宝食品~付达新商贸~众德营销 沈阳盛和塾道盛组/稻芽七组 {祈愿} 20...
    熊志军阅读 218评论 0 0
  • 【日精进打卡第我192天】 【知~学习】 《六项精进》2遍 共380遍 《大学》2遍 共380遍 【经典名句分享】...
    陈威杰阅读 154评论 0 0