美文网首页
iOS push横屏小记(强制横屏)

iOS push横屏小记(强制横屏)

作者: 达若漠沙 | 来源:发表于2018-07-02 19:30 被阅读53次

            present 横屏逻辑很简单,但是有一个问题,在present新VC时,原VC导航栏会向上抖动,看起来效果不太好。于是一直希望能够通过push来避免这个抖动。

    为了实现这个效果,尝试了两种方式:

    方式一:假push ,实则依然使用present 来推出新VC ,方法也很简单,修改present动画就好。

           CATransition *animation =[CATransition animation];

            [animation setDuration:0.3];

            [animation setType:kCATransitionMoveIn];

           [animation setSubtype:kCATransitionFromBottom];

            [[[[UIApplication sharedApplication]keyWindow]layer]addAnimation:animation forKey:nil];

            [self presentViewController:nav animated:NO completion:nil];

    不过这个过程中,会导致present过程中底部出现黑屏.

    方式二:真push,在push的同时,强制旋转屏幕。

     ViewController2  *dancingStepVC = [[ViewController2 alloc] init];

        [self orientationToPortrait:UIInterfaceOrientationLandscapeLeft];

        [self.navigationController pushViewController:dancingStepVC animated:YES];

    最终方式二完美实现了想要的效果。

    注意:如果app本身就支持各个方向的旋转,那么orientationToPortrait 方法使用起来很方便。

    不过,通常app都是默认竖屏的。虽然在工程设置里,可能设置了支持某个方向的横屏:

    工支持的屏幕旋转样式

    但是,想要设置某个页面的指定屏幕方向,还需要对以下三个参数进行设定:

    1、app 支持的旋转旋转方向;

    appdelegate.m

    -(UIInterfaceOrientationMask)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window 

    2、屏幕旋转页面的旋转方向

    3、返回上一级页面时上一级页面原来的旋转方向

    对于1,很好解决,在appdelegate.h 里设定一个Bool类型的标志位allowRotation,用来动态控制app支持的旋转方向

    比如,常规页面下,仅仅支持竖屏,则allowRotation = YES;return 支持的旋转方向仅为:

    UIInterfaceOrientationMaskLandscapeLeft

    在非常规页面下,allowRotation = NO ;支持旋转方向 UIInterfaceOrientationMaskPortrait

    对于2,3也很简单,就是对orientationToPortrait方法传参。

    说了这么多,直接上干货:demo地址

    如果喜欢,请简书点击喜欢,如果觉着demo有用,欢迎star哦~

    支付宝扫码领红包,小伙伴们,来来来,扫一扫,说不定领完红包支付的时候就多个鸡腿呢~

    领红包

    相关文章

      网友评论

          本文标题:iOS push横屏小记(强制横屏)

          本文链接:https://www.haomeiwen.com/subject/oqjluftx.html