在iOS软件开发中,一般APP可能是需要全部横屏或者竖屏,但是有的时候会遇到这样的问题,就是我们的其中一个或者几个页面需要横屏或者竖屏,其他的界面方面不发生改变,那么,我们该如何实现呢?前几天我就发现了这个问题,但是网上的资料大多都是陈旧的老古董了,多数是iOS4.0版本左右的方法,小数是iOS6.0左右的,现在iOS已经更新到9.3,所以以前好多方法都不能使用了.下面我就说一下对如何使用纯代码对部分页面进行横竖屏的切换.
一、功能实现的必备条件
- 项目工程中必须设置支持其他方向,不能只支持竖屏或者横屏.如图所示
- 有个自定义的UINavigationController的子类,里面需要实现如下三个方法
-(BOOL)shouldAutorotate
{
return YES;}
-(NSUInteger)supportedInterfaceOrientations
{
return [self.viewControllers.lastObject
supportedInterfaceOrientations];
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [self.viewControllers.lastObject
preferredInterfaceOrientationForPresentation];
}
- 需要做横竖屏切换的界面实现对应的三个方法,和自定义的UINavigationController的子类所需要实现的方法一样,但是我们要把转换方向做对应的改变.
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self dismissViewControllerAnimated:YES completion:nil];
}
- (BOOL)shouldAutorotate
{
return NO;
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeRight;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeRight;
}
- (重要) 这一个也是最关键,push页面的时候必须要使用 presentViewController:UIViewController animated:(BOOL)completion:(void)completion ,当然了,pop页面的时候就要用dismissViewControllerAnimated了.
//push页面的时候
[self.navigationController presentViewController:[[newVC alloc]init] animated:YES completion:nil];
//pop页面的时候
[self dismissViewControllerAnimated:YES completion:nil];
因为涉及到多个控制器,所以代码就不在这里面写了,因为写了多乱糟糟的,所以做了个Demo,下面给大家一个自己Demo的链接,大家可以下载查看,谢谢大家.