美文网首页横屏
iOS 屏幕强制旋转 (Model、Push、导航栏、状态栏)

iOS 屏幕强制旋转 (Model、Push、导航栏、状态栏)

作者: CCSHCoder | 来源:发表于2017-07-19 16:01 被阅读402次

    状态栏旋转详见

    界面旋转准备

    • 在AppDelegate.h中添加属性
    //是否旋转
    @property (nonatomic, assign) BOOL isRotation;
    
    • 在AppDelegate.m中添加方法
    - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
        
        if (self.isRotation) {
            //可以针对不同的界面创建不同的值,进行返回
            return UIInterfaceOrientationMaskLandscape;
        }
        return UIInterfaceOrientationMaskPortrait;
    }
    
    • 进入正题,找到需要旋转的界面
    - (IBAction)btnClick:(id)sender {
        NSLog(@"旋转");
        //支持旋转
        AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
        app.isRotation = YES;
    
        [self interfaceOrientation:UIInterfaceOrientationLandscapeLeft];
    }
    
    - (void)interfaceOrientation:(UIInterfaceOrientation)orientation
    {
        //强制转换
        if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
            
            SEL selector = NSSelectorFromString(@"setOrientation:");
            NSInvocation * invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
            [invocation setSelector:selector];
            [invocation setTarget:[UIDevice currentDevice]];
            int val = orientation;
            [invocation setArgument:&val atIndex:2];
            [invocation invoke];
        }
    }
    
    - (void)viewWillDisappear:(BOOL)animated{
        [super viewWillDisappear:animated];
        
        //关闭旋转(恢复原状)
        AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
        app.isRotation = NO;
        
        [self interfaceOrientation:UIInterfaceOrientationPortrait];
    }
    

    需要注意的是这个值可以在你真的需要旋转的时候进行赋值,比如在视频播放的时候全屏点击的时候进行处理

    另附上代码地址仅供参考

    相关文章

      网友评论

      • 不辣先生:自动旋转强制隐藏导航条,怎么处理?
        CCSHCoder:https://www.jianshu.com/p/44656b99bb94 这里面有隐藏tabbar 你可以根据需求去进行调用,你看一下有没有用
        不辣先生:@Kevin丶 我打错了,我是想隐藏tabbar条,对就是横屏隐藏,竖屏现
        CCSHCoder:你想旋转之后隐藏导航栏是么。回来出现是么
      • ArchLL:atIndex为什么是2?
        CCSHCoder:@89848af90932 有demo可以看一下 今天我看了一下是可以的
        89848af90932:没有效果啊
        CCSHCoder:因为0 1 两个参数已经被selector和target占用

      本文标题:iOS 屏幕强制旋转 (Model、Push、导航栏、状态栏)

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