美文网首页动画animation
iOS开发系列之终结强制旋转屏幕——OC

iOS开发系列之终结强制旋转屏幕——OC

作者: zmfflying | 来源:发表于2020-08-21 10:11 被阅读0次

最近做项目遇到一个需求,就是大部分页面都是竖屏,只有两个页面是横屏,这就要用到强制旋转屏幕了。我查了网上的资料,人云亦云者众多,但是真正有效的很少,所以干脆我自己总结一个吧,demo见底部,文章里所有代码和设置都是demo里的。

第一步:设置项目属性为只允许竖屏

image.png

需要注意的是,iPad需要在info.plist里设置:

image.png

第二步:AppDelegate里的代码

在 AppDelegate.h里面:

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (nonatomic, strong) UIWindow *window;
@property (assign , nonatomic) BOOL isForceLandscape;
@property (assign , nonatomic) BOOL isForcePortrait;

@end

在 AppDelegate.m里面:

-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    if (self.isForceLandscape) {
        //这里设置允许的横屏类型
        return UIInterfaceOrientationMaskLandscapeRight;
    }else if (self.isForcePortrait){
        return UIInterfaceOrientationMaskPortrait;
    }
    return UIInterfaceOrientationMaskPortrait;
}

第三步:在控制器里的代码,demo是写在控制器的基类BaseViewController里的

在 BaseViewController.h里声明:

@interface BaseViewController : UIViewController
//强制横屏
- (void)forceOrientationLandscape;
//强制竖屏
- (void)forceOrientationPortrait;
@end

在 BaseViewController.m里实现:

//强制横屏
- (void)forceOrientationLandscape {

    AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;
    appdelegate.isForceLandscape=YES;
    appdelegate.isForcePortrait=NO;
    [appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];
    //强制翻转屏幕,Home键在右边。
    [[UIDevice currentDevice] setValue:@(UIInterfaceOrientationLandscapeRight) forKey:@"orientation"];
    //刷新
    [UIViewController attemptRotationToDeviceOrientation];
}

//强制竖屏
- (void)forceOrientationPortrait {

    AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;
    appdelegate.isForcePortrait=YES;
    appdelegate.isForceLandscape=NO;
     [appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];
    //设置屏幕的转向为竖屏
    [[UIDevice currentDevice] setValue:@(UIDeviceOrientationPortrait) forKey:@"orientation"];
    //刷新
    [UIViewController attemptRotationToDeviceOrientation];
}

第四步:使用,demo里是Test1ViewController 使用横屏,TestViewController 使用竖屏:

在 Test1ViewController里使用强制横屏:

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    // 强制横屏
    [self forceOrientationLandscape];
}

在 TestViewController里使用强制竖屏:

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    
    //强制旋转竖屏
    [self forceOrientationPortrait];
}

搞定收工,demo地址: https://github.com/zmfflying/ZOrientation

资料参考:
https://www.jianshu.com/p/5c773628caa6

相关文章

  • iOS开发系列之终结强制旋转屏幕——OC

    最近做项目遇到一个需求,就是大部分页面都是竖屏,只有两个页面是横屏,这就要用到强制旋转屏幕了。我查了网上的资料,人...

  • iOS开发系列之终结强制旋转屏幕——Swift

    最近做项目遇到一个需求,就是大部分页面都是竖屏,只有两个页面是横屏,这就要用到强制旋转屏幕了。我查了网上的资料,人...

  • iOS-屏幕旋转截屏相关

    本篇收录各种屏幕旋转知识点等. 1.详解iOS开发中处理屏幕旋转的几种方法2.iOS 个别页面强制横屏,其他页面竖...

  • iOS 强制旋转屏幕

    项目需求: 我只是以第一个需求为例,第二种情况,道理相同。 无需强行选中 Device Orientation 中...

  • iOS 强制旋转屏幕

    前言 在开发中有时会碰到旋转屏幕的需求,例如直播时横竖屏推流,这里我使用的一种方法时用纯代码强制翻转,其他晚上方法...

  • iOS强制屏幕旋转

    最近项目需要展现一些图表,需要在用到的页面将页面设置为横屏,查阅整理出三个方案记录下来。其中方案一和方案二整个页面...

  • iOS强制旋转屏幕

    // 状态栏动画持续时间CGFloat duration = [UIApplication sharedAppli...

  • iOS开发之屏幕旋转

    开发了很久一直没有用到过屏幕旋转,一般app设置固定竖屏也就可以了,但是涉及到视频播放的时候全屏播放就是不得不实现...

  • iOS 横竖屏处理

    开发中有竖屏和横屏的界面时,我们需要监听屏幕旋转,强制横屏,锁定方向后的屏幕强制旋转等处理.以下做个总结: 一.横...

  • IOS 强制设置屏幕旋转

    今天研究了下强制设置屏幕旋转,在这记录下 如果app需要有界面旋转屏幕的,那么你的General里的Device ...

网友评论

    本文标题:iOS开发系列之终结强制旋转屏幕——OC

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