iOS6中横屏的处理方法 原

IOS6以后,若想在项目中支持横屏,我们首先需要在plist文件中添加支持横屏的设置,否则有些代码设置将会失效。

有来那个方式设置:

1、在pilist的Supported interface orientations 字段中添加

2、在Xcode的设置中勾选

现在我们来看决定屏幕方向的几个函数:

在IOS6之前,我们只需通过一个函数

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {     return (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight); }

就可以支持指定控制器的旋转。通过新的文档,我们可以看到:

// Applications should use supportedInterfaceOrientations and/or shouldAutorotate..
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
     NS_DEPRECATED_IOS(2_0, 6_0);
//这个方法在6.0之后被标记为过时的

我们通过下面两个方法来代替:

//是否允许屏幕旋转

-(BOOL)shouldAutorotate{     return YES; } //支持的方向 - (NSUInteger)supportedInterfaceOrientations {     return UIInterfaceOrientationMaskLandscapeRight; } 这是个枚举

typedef NS_OPTIONS(NSUInteger, UIInterfaceOrientationMask) {
    UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait),
    UIInterfaceOrientationMaskLandscapeLeft = (1 << UIInterfaceOrientationLandscapeLeft),
    UIInterfaceOrientationMaskLandscapeRight = (1 << UIInterfaceOrientationLandscapeRight),
    UIInterfaceOrientationMaskPortraitUpsideDown=(1 << UIInterfaceOrientationPortraitUpsideDown),
    UIInterfaceOrientationMaskLandscape = (UIInterfaceOrientationMaskLandscapeLeft 
                                        | UIInterfaceOrientationMaskLandscapeRight),
    UIInterfaceOrientationMaskAll = (UIInterfaceOrientationMaskPortrait 
                                    | UIInterfaceOrientationMaskLandscapeLeft
                                    | UIInterfaceOrientationMaskLandscapeRight 
                                    | UIInterfaceOrientationMaskPortraitUpsideDown),
    UIInterfaceOrientationMaskAllButUpsideDown = (UIInterfaceOrientationMaskPortrait 
                                    | UIInterfaceOrientationMaskLandscapeLeft 
                                    | UIInterfaceOrientationMaskLandscapeRight),
};

通过这两个函数,如果我们需要某个控制器强制方向,我们可以设置支持单一的方向,即可达到目的。

注意:

如果你们项目中的RootViewController是导航,你会发现,你在Push出来的视图中添加刚才的代码并没有起作用,原因是导航,并没有进行设置,我们创建一个文件,继承于NavigationController。在里面重写刚才的方法,这么做后,屏幕确实横了过来,并且这个导航push的所有子界面都将横屏,这也不是我们想要的效果。我们想自由的控制每个push出来的界面的屏幕方向,可以在导航里这么做:

-(BOOL)shouldAutorotate{
    return [self.topViewController shouldAutorotate];
}
//支持的方向
- (NSUInteger)supportedInterfaceOrientations {
    return [self.topViewController supportedInterfaceOrientations];;
}

我们还需要做一些处理,经过我的测试,导航必须在pop后才会重新调用这些函数,所以我的方法是这样做:弹出一个中间控制器后再POP回来

@implementation ViewController2

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self.navigationController pushViewController:[[ViewController3 alloc]init] animated:YES];
}
@implementation ViewController3

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self.navigationController popViewControllerAnimated:YES];
}

这样做,我们就可以自由的控制每个视图控制器的方向了。

同理,如果根视图控制器是tabBar,则我们需要在tabBar中做操作。

如果我们大多是的视图控制器都是一个方向的,只有偶尔的几个会不同,这时候,我们其实可以采取presentationController的方式,然后直接在弹出的控制器中写那两个方法即可。这是最简单的途径了。

专注技术,热爱生活,交流技术,也做朋友。 ——珲少 QQ群:203317592

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DannyHoo的专栏

iOS开发中动态更换应用图标

注意:更换的icon不能放在asserts文件中,否则无法更换成功。(你可以试试)

3562
来自专栏美丽应用

SkyOlin助手:使应用窗口化的黑科技

1973
来自专栏IMWeb前端团队

React-Native简介

React-Native 基于目前React来开发IOS原生应用,Android版本将在年底推出。 为什么需要React-Native 目前主流的应用大体分成三...

32810
来自专栏freesan44

实现 iOS 前台时的推送弹窗效果

原文链接:http://www.jianshu.com/p/67864e1c2085

1582
来自专栏每日一篇技术文章

SceneKit-真机渲染效果和模拟器不一致

如果是模拟器默认使用 SCNViewOptionPreferredRenderingAPI ,如果是真机默认使用第二种,所以这是残生不同渲染效果的原因,我们修改...

1611
来自专栏james大数据架构

Android一些关于分辨率和布局的设置

1、Android手机屏幕大小不一,有480x320, 640x360, 800x480.怎样才能让App自动适应不同的屏幕呢? drawable- hdpi、...

2069
来自专栏Puppeteer学习

使用puppeteer抓取受限网站

不要相信前端是安全的,今天简单验证一下(但是希望大家支持正版,支持原作者,毕竟写书不易)。

64413
来自专栏DannyHoo的专栏

苹果系统自带滑动返回功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

6592
来自专栏破晓之歌

vue引入各类ui库 原

本身集成并没有vue的部分,我们采用的方式是把ui-css部分拿来使用,js效果自己用jquery写到methods里

6085
来自专栏前端说吧

css - 移动端reset汇总与注释

6176

扫码关注云+社区

领取腾讯云代金券