ResideMenu+个别界面横屏+屏幕不跟随重力旋转

2019-10-14  本文已影响0人  小鲜肉老腊肉都是肉

1.横屏开发遇到的bug

设置横屏的代码我参考自这儿,我使用这儿的第二个方法,设置完毕呢,发现了两个bug

(1)在从横屏界面返回上级竖屏界面的时候,会卡顿一下,即下面gif图情况

image

(2)打开手机控制中心中的方向键情况下,在不需要旋转的界面,屏幕仍然会跟随手机旋转而旋转,在锁定方向键情况下,就只在我们设置横屏的界面旋转了,很蛋疼啊,我们又不能控制用户去锁定方向键。。。

2.解决方案

问题(1)还是比较好解决的,我多次测试发现,我按照这儿方法二做的,第3、4步设置竖屏界面A和进去的界面B的,我按照上面设置了,就是这一步导致的问题(1)的bug,实际上,只需要在rootViewController(根视图)里面和横屏界面设置即可,竖屏界面不需要设置,即不需要在横屏界面之前的竖屏界面设置,也不需要在继承于UIViewController的BaseViewController设置。

问题(2)解决起来很费劲啊,直到我遇见了和他(后面这个地址找不到了,如果有人知道的话,还请告诉我一声)。

简述一下“”的主要思路:

第一步,在工程General里设置Device Orientation支持的方向。

第二步,在RootViewController里面设置shouldAutorotate和supportedInterfaceOrientations方法。为什么在**rootViewController**里面设置**shouldAutorotate**方法呢?因为每当手机发生旋转时,就会掉用根视图的 shouldAutorotate 方法([出自这儿](https://www.jianshu.com/p/452e1d909237?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation))

第三步,在需要横屏的地方设置横屏。

再简述一下“他”的思路:在supportedInterfaceOrientations里面设置支持的方向的时候,判断当前ViewController是不是我们需要旋转的VC,是的话返回横屏,不是的话返回竖屏。

3.实现思路及代码

第一步:在General里设置Device Orientation支持的方向

第二步:去RootViewController(根视图)设置shouldAutorotate和supportedInterfaceOrientations方法,设置supportedInterfaceOrientations时需要判断当前操作的VC是不是我们需要旋转屏幕的VC。

我的项目使用了ResideMenu库实现了侧滑抽屉,项目的根视图是ResideMenu初始化的,但是ResideMenu是别人的库,我自己去改不合适啊,所以我就建了个分类单独放shouldAutorotate和supportedInterfaceOrientations方法,在这儿写代码就相当于在RootViewController里面写。shouldAutorotate方法直接return YES即可,supportedInterfaceOrientations稍微有点复杂,supportedInterfaceOrientations方法里面的思路如下:

image

那怎么“获取当前操作的ViewController”呢?网上一搜,找到了!

image

注意代码里面54行的判断,因为我的项目使用了ResideMenu库实现了侧滑抽屉,项目的根视图是ResideMenu初始化的,项目是由ResideMenu控制TabBarViewController,TabBarViewController控制NavigationController,所以我要多加这一个判断条件。如果根视图是TabBarViewController,TabBarViewController控制NavigationController的话不需要加54行判断即可。

第三步:设置横屏代码。不要忘记在横屏界面返回竖屏界面的时候旋转回去。

image

还有一点,网上很多教程都让在当前横屏的界面设置shouldAutorotate和supportedInterfaceOrientations方法,但是我亲测按照我这个方法做的话就没必要写了,因为手机发生旋转时,就会掉用根视图的 shouldAutorotate 方法,我们在根视图里面已经做了判断,让当前ViewController支持旋转,因为按照这儿说的,在RootViewController里面设置旋转代码的优先级要高于ViewController里面的设置。

上一篇 下一篇

猜你喜欢

热点阅读