zoukankan      html  css  js  c++  java
  • ios开发某个页面横不过来屏幕的时候

    某一个页面需要横屏,其他的页面任然保持竖屏需要以下关键的几个步骤:

    1.修改系统代理方法的返回值

     1 -(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
     2     //需要横屏的页面将此属性allowRotation修改为YES,竖屏的页面修改为NO
     3     if (_allowRotation == YES) {
     4         //页面仅支持横屏
     5         return UIInterfaceOrientationMaskLandscapeRight;
     6     }else{
     7         //页面仅支持竖屏
     8         return UIInterfaceOrientationMaskPortrait;
     9         
    10     }
    11 }

    2.在需要横屏的界面修改方法-(BOOL)shouldAutorotate的返回值为YES

    - (BOOL)shouldAutorotate {
        
    #if 1
        
        // 设置orientation来横屏竖屏(方式一)
        return YES;
        
    #else
        
        // 旋转式横屏竖屏(方式二)
        return NO;
        
    #endif
        
    }

    3.代码实现将屏幕横过来

    #pragma mark 横竖屏切换方法
    - (void)interfaceOrientation:(UIInterfaceOrientation)orientation
    {
        ///  注释掉是因为包含私有API,不敢调用啊
        //    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;
        //        // 从2开始是因为0 1 两个参数已经被selector和target占用
        //        [invocation setArgument:&val atIndex:2];
        //        [invocation invoke];
        //    }
        
    #if 1
        
        // 设置orientation来横屏竖屏(方式一)
        NSNumber *resetOrientationTarget = [NSNumber numberWithInt:UIInterfaceOrientationUnknown];
        
        [[UIDevice currentDevice] setValue:resetOrientationTarget forKey:@"orientation"];
        
        NSNumber *orientationTarget = [NSNumber numberWithInt:orientation];
        
        [[UIDevice currentDevice] setValue:orientationTarget forKey:@"orientation"];
        //刷新
        [UIViewController attemptRotationToDeviceOrientation];
        
    #else
        
        // 旋转式横屏竖屏(方式二)
        if (orientation == UIInterfaceOrientationLandscapeRight) {
            [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];
            self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
            self.view.frame = CGRectMake(0, 0, MainScreenHeight, MainScreenWidth);
            self.titleImage.frame = CGRectMake(0, 0, MainScreenHeight, MainScreenWidth);
        }
        
        if (orientation == UIInterfaceOrientationPortrait) {
            [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];
            self.view.transform = CGAffineTransformMakeRotation(0);
            self.view.frame = CGRectMake(0, 0, MainScreenWidth, MainScreenHeight);
            self.titleImage.frame = CGRectMake(0, 0, MainScreenWidth, MainScreenHeight);
        }
        
    #endif
    }

    4.UIViewController系统代理方法来检测屏幕旋转

    #pragma mark 横竖屏切换或者进来横屏会触发的方法
    -(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
        [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
            //转屏前调入 -- 此处调用在viewDidLoad之前(重写init方法除外),可在此处做一些控件布局的横竖屏转换
           completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
            //转屏后调入 -- 此处调用在viewDidLoad之后,可在此处做一些控件布局的横竖屏转换
        }];
        [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
    }

    经过上述4个步骤可完美实现转屏

    by:初光夫

  • 相关阅读:
    视图创建
    根据表格作业题
    表格 作业题练习
    创建表格 练习题
    聚合函数、数学函数、日期时间函数
    接口自动化框架
    python+request+Excel 几十份接口测试用例一起自动化测试的接口测试框架
    python3 函数
    pip源头
    爬虫
  • 原文地址:https://www.cnblogs.com/widgetbox/p/9699782.html
Copyright © 2011-2022 走看看