iOS 屏幕旋转(仅手动旋转)

修建 (3).gif

需求:单页面旋转或手动旋转,代码注释写的很全想要的旋转效果都可以自行更改实现。

1.了解旋转API

  • 一个布尔值,指示视图控制器的内容是否应自动旋转
- (BOOL)shouldAutorotate{
    return YES;
}
  • 视图控制器支持的界面方向。( 当设备旋转时.会走这里返回需要旋转的方向 。如:AppDelegate.allowRotation设置UIInterfaceOrientationMaskPortrait 旋转的方向不支持时.触发旋转会闪退)
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

2. 首先确认需要旋转的控制器是否有走以下两个方法

  • shouldAutorotate和supportedInterfaceOrientations确认是否正常执行。
  • 如果不走以上两个方法则是以下几种情况(因为被根控制器给接管了,所以根据自己的情况调整)
    1. NavigationController导航栏下的VC控制器,对于这种场景只需要在根导航栏里面添加以下代码即可
- (BOOL)shouldAutorotate{
    return [self.visibleViewController shouldAutorotate];
}

    1. TabbarController下的VC控制器,对于这种场景只需要在基类里面添加以下代码即可
-(BOOL)shouldAutorotate {
    return [self.selectedViewController shouldAutorotate];
}

3.关于布局约束刷新的问题

  • 有很多人代码写的约束屏幕旋转后布局不旋转的问题需要在viewDidLayoutSubviews根据需求刷新约束。

4.代码展示

  • AppDelegate 通过一个allowRotation 属性来限制旋转支持的方向
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    if (self.allowRotation) {
        //NSLog(@"AppDelegate---支持旋转");
        return UIInterfaceOrientationMaskAll;
    }else{
        //NSLog(@"AppDelegate---仅支持竖屏");
        return UIInterfaceOrientationMaskPortrait;
    }
}

5.具体请看demo有什么疑问疑惑可以留言。点个赞支持分享~谢谢

  • 我的demo只以NavigationController举例

Demo-万水千山总是情,给个Stars 行不行

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