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

本文介绍了如何在iOS应用中实现指定页面仅支持横屏、支持横竖屏以及强制单向横屏的功能。通过在APPdelegate中设置不同值,配合BaseViewController及各页面的viewWillAppear方法,调整屏幕方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在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];




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值