天天看点

IOS强制横竖屏切换

ios横竖屏切换是一个很纠结的问题,之前项目中用到了,花了长时间查阅资料以及研究,才找到了一个相对靠谱的解决方案,该方案可以处理ios9系统以上的屏幕翻转,至于ios9一下的系统,还没有测试过。

为了过程的讲解,我先给出一个应用的需求:整个界面就显示一个按钮,当点击这个按钮的时候,界面能从竖屏切换到横屏,当再次点击的时候,又能从横屏切换到竖屏,之后点击循环往复。为了达到这样的需求,我们首先新建一个ios工程。

在工程创建之后,需要设置应用支持的屏幕旋转方向。默认情况下,ios支持四个方向的旋转,即portrait、upsidedown、landscapeleft、landscaperight。

可以在工程配置的general下面可以看到,也可以在info.plist里面进行配置

IOS强制横竖屏切换

info.plist

IOS强制横竖屏切换

配置好应用支持的屏幕旋转类型之后,接下来就需要在代码中配置横竖屏的情况。

这里很关键的一点是一定要配置rootviewcontroller的横竖屏情况,特别是当rootviewcontroller是navigationviewcontroller的时候,所以一定要对作为rootviewcontroller的controller进行重写。下面给出的代码是对navigationviewcontroller的重写。

重写实现navigationviewcontroller的shouldautorate和supportedinterfaceorientations这两个关键的方法,网上大部分建议都是让shouldautorate返回no,但实际上,返回no的话,则会导致同一个界面的不能进行翻转,所以这里还是需要返回yes的。需要注意的是,interfaceorientationmask和interfaceorientation的初始值需要在controller初始化的时候进行赋值的,取值按照应用刚启动的时候屏幕翻转方向来设定。

之后,将这个navigationviewcontroller作为应用启动的rootviewcontroller,在appdelegate中的调用如下:

其中,viewcontroller是要显示的第一个界面,其内容的代码如下:

这个界面很简单,就一个按钮,每当点击的时候,设置一下rotatenavigationcontroller的两个参数的值,并且切换一下屏幕的方向,同时,再刷新一下。这里的关键的方法是:

这个方法能改变设备实际的旋转方向。

完成以上的几块内容,实际上就可以控制屏幕的横竖屏切换了。