美文网首页
iOS 强制旋转屏幕

iOS 强制旋转屏幕

作者: 木木等你 | 来源:发表于2017-10-26 17:00 被阅读98次
项目需求:
    1 竖屏状态,想在 present 的时候为横屏
    2 横屏状态, present的时候 为竖屏状态.

我只是以第一个需求为例,第二种情况,道理相同。


1.gif
  1. 无需强行选中 Device Orientation 中的 Portrait 选项 如图1,当然选中也是可以的。
1.png

2.在appdelegate 中设置标识符,或者枚举类型,判断当前屏幕支持的屏幕 orientation 方向。

//  AppDelegate.h
#import <UIKit/UIKit.h>
typedef NS_ENUM(NSUInteger, ViewDirection) {
    ViewDirectionAll = 0,
    ViewDirectionLandscape,
    ViewDirectionPortrait,
};

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (nonatomic,assign) ViewDirection viewDirection;

@end

然后在.m文件中

//  AppDelegate.m
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
        if (self.viewDirection == ViewDirectionAll){
        return UIInterfaceOrientationMaskAllButUpsideDown;
        } else if (self.viewDirection == ViewDirectionLandscape){
            return UIInterfaceOrientationMaskLandscape;
        } else if (  self.viewDirection == ViewDirectionPortrait) {
            return UIInterfaceOrientationMaskPortrait;
        } else {
            return UIInterfaceOrientationMaskPortrait;
        }
}

3 .1先实现 present 部分, 如果是跳转到 navigationController 的rootViewController 中 需要在自定义navigationController 在.m中添加如下代码

// @interface NavViewController : UINavigationController
//  NavViewController.m
- (BOOL)shouldAutorotate{
    return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskLandscape;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
//    return UIInterfaceOrientationPortrait;
    return UIInterfaceOrientationLandscapeLeft|UIDeviceOrientationLandscapeRight;
}

3.2 跳转实现。

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    WebViewController *webVC = [[WebViewController alloc] initWithNibName:NSStringFromClass([WebViewController class]) bundle:nil];
    NavViewController * nav = [[NavViewController alloc] initWithRootViewController:webVC];
    [self presentViewController:nav animated:YES completion:nil];
}

4 特殊问题,如果 是横屏状态 用到alertviewcontroller时。会crash 。解决办法,写一个分类.

#import "UIAlertController+MMAlertController.h"

@implementation UIAlertController (MMAlertController)
- (BOOL)shouldAutorotate{
    return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}
@end

5 特殊问题2,如果是横屏状态,跳转到竖屏状态,而竖屏又push 到另一个vc中,一定要在另一个vc中重写 上三方法。不然会导致 status bar 横过来。

参考文档
ios 强制横屏大总结
iOS_关于手机支持的屏幕方向

相关文章

  • iOS 强制旋转屏幕

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

  • iOS 强制旋转屏幕

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

  • iOS强制屏幕旋转

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

  • iOS强制旋转屏幕

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

  • iOS-屏幕旋转截屏相关

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

  • IOS 强制设置屏幕旋转

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

  • iOS16屏幕旋转

    iOS16出来一段时间了,个别app出现屏幕不能强制旋转全屏,原因就是iOS不再支持UIDevice 方式的旋转下...

  • 屏幕旋转

    屏幕旋转 推荐文档 了解UIWindow——UIWindow实践 iOS屏幕旋转问题总结 IOS:屏幕旋转与变换 ...

  • iOS 部分界面强制横屏与强制竖屏

    最新屏幕强制旋转详见 强制横屏(此方法为旋转视图) 恢复竖屏

  • iOS 获取屏幕方向,和强制屏幕旋转

    iOS 获取屏幕方向 建议使用[UIApplication sharedApplication].statusBa...

网友评论

      本文标题:iOS 强制旋转屏幕

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