需求:单页面旋转或手动旋转,代码注释写的很全想要的旋转效果都可以自行更改实现。
1.了解旋转API
- 一个布尔值,指示视图控制器的内容是否应自动旋转
- (BOOL)shouldAutorotate{
return YES;
}
- 视图控制器支持的界面方向。( 当设备旋转时.会走这里返回需要旋转的方向 。如:AppDelegate.allowRotation设置UIInterfaceOrientationMaskPortrait 旋转的方向不支持时.触发旋转会闪退)
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;
}
2. 首先确认需要旋转的控制器是否有走以下两个方法
- shouldAutorotate和supportedInterfaceOrientations确认是否正常执行。
- 如果不走以上两个方法则是以下几种情况(因为被根控制器给接管了,所以根据自己的情况调整)
- NavigationController导航栏下的VC控制器,对于这种场景只需要在根导航栏里面添加以下代码即可
- (BOOL)shouldAutorotate{
return [self.visibleViewController shouldAutorotate];
}
- 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举例