object-c中实现特定一个或者多个页面横竖屏,其他界面保持竖屏显示。

1.首先设置项目支持的屏幕方向。info.plist设置(自行设置)

2.写一个子类CusNavigationController 继承 UINavigationController,在CusNavigationController.m中重写方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
UIViewController *vc = self.topViewController;
if([vc isKindOfClass:[RegionViewController class]]){//要横屏的界面
return (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);//选择需要支持的翻转方向
}
return (toInterfaceOrientation == UIInterfaceOrientationPortrait);//其他界面均为竖屏

}

- (BOOL)shouldAutorotate {
UIViewController *vc = self.topViewController;
if([vc isKindOfClass:[RegionViewController class]]){//要横屏的界面
return YES;
}
//横屏的上一个界面,要返回为YES,否则横屏返回的时候上一界面不能还原成竖屏
if([vc isKindOfClass:[RootViewController class]]){
return YES;
}
return NO;
}
3.在需要横竖屏翻转的ViewController.m(这里为RegionViewController) 重写以下方法:
- (BOOL)shouldAutorotate {
//是否允许转屏
return YES;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
//viewController所支持的全部旋转方向
return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskLandscapeRight ;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
//viewController初始显示的方向
return UIInterfaceOrientationPortrait;
}
4.如果使用了autolayout布局的话,可以实现横竖屏适配。

posted @ 2017-10-20 22:43  理想三旬丶  阅读(637)  评论(0编辑  收藏  举报