iOS 指定页面允许旋转/ 指定页面强制横屏

 在APPdelegate.h 中

@property (assign , nonatomic) NSInteger isForcePortrait;


APPdelegate.m 中

self.isForcePortrait == 1 《只支持横屏》

self.isForcePortrait == 2 《支持左右横屏和竖屏

self.isForcePortrait == 3  《只支持一个方向的横屏》


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

    if (self.isForcePortrait == 1){

        return UIInterfaceOrientationMaskPortrait;

    }else if(self.isForcePortrait == 2){

        return UIInterfaceOrientationMaskLandscapeRight|UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskPortrait;

    }else if (self.isForcePortrait == 3){

         return UIInterfaceOrientationMaskLandscapeRight;

    }else{

      return UIInterfaceOrientationMaskPortrait;

    }

}

情况1:只支持横屏的controller. 所有只支持竖屏的controller继承于基类baseviewcontroller,,

BaseViewController.m中

- (void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];


    AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;

    appdelegate.isForcePortrait=1;

    [appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];

}


情况2:支持竖屏,左右横屏,,.支持竖屏,左右横屏的controller.m中

- (void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

    AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;

    appdelegate.isForcePortrait=2;

    [appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];

}


情况3:只支持横屏controller 进来就横屏且只能横屏在controller.m中


- (void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];


    AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;

    appdelegate.isForcePortrait=3;

    [appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];

    //// 屏幕开始发生旋转

    [self orientationToPortrait:UIInterfaceOrientationLandscapeRight];

}


/// 屏幕发生旋转的方法==============

- (void)orientationToPortrait:(UIInterfaceOrientation)orientation {

    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];//前两个参数已被target和selector占用

    [invocation invoke];

}


记得页面消失的时候 把屏幕旋转为竖屏  返回方法或屏幕消失方法中


AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;

        appdelegate.isForcePortrait=1;

        [appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];

        [weakself orientationToPortrait:UIInterfaceOrientationPortrait];




你可能感兴趣的:(iOS 指定页面允许旋转/ 指定页面强制横屏)