华山论剑之iOS强制横竖屏的切换

在iOS软件开发中,一般APP可能是需要全部横屏或者竖屏,但是有的时候会遇到这样的问题,就是我们的其中一个或者几个页面需要横屏或者竖屏,其他的界面方面不发生改变,那么,我们该如何实现呢?前几天我就发现了这个问题,但是网上的资料大多都是陈旧的老古董了,多数是iOS4.0版本左右的方法,小数是iOS6.0左右的,现在iOS已经更新到9.3,所以以前好多方法都不能使用了.下面我就说一下对如何使用纯代码对部分页面进行横竖屏的切换.


一、功能实现的必备条件


  • 项目工程中必须设置支持其他方向,不能只支持竖屏或者横屏.如图所示
华山论剑之iOS强制横竖屏的切换_第1张图片
  • 有个自定义的UINavigationController的子类,里面需要实现如下三个方法
-(BOOL)shouldAutorotate
{
    
    return YES;}

-(NSUInteger)supportedInterfaceOrientations

{
    return [self.viewControllers.lastObject
            
            supportedInterfaceOrientations];
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    
    return [self.viewControllers.lastObject
            preferredInterfaceOrientationForPresentation];
}

  • 需要做横竖屏切换的界面实现对应的三个方法,和自定义的UINavigationController的子类所需要实现的方法一样,但是我们要把转换方向做对应的改变.
-(void)touchesBegan:(NSSet *)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的链接,大家可以下载查看,谢谢大家.

-----> 点击下载横竖屏强制切换的Demo

你可能感兴趣的:(华山论剑之iOS强制横竖屏的切换)