美文网首页
ResideMenu+个别界面横屏+屏幕不跟随重力旋转

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

作者: 小鲜肉老腊肉都是肉 | 来源:发表于2019-10-14 10:33 被阅读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里面的设置。

相关文章

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

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

  • android:screenOrientation属性详解

    landscape:限制界面为横屏,旋转屏幕也不会改变当前状态。portrait:限制界面为竖屏,旋转屏幕也不会改...

  • iOS 横竖屏处理

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

  • 关于设置横竖屏的问题总结

    项目需求:首页不横屏 从首页进入下一个控制器是一个播放界面,用于播放视频,该界面会自动旋转屏幕,并且可以手动旋转屏...

  • iOS 部分界面强制屏幕横屏

    不赘述直接切入本次话题部分界面屏幕横屏 因为是部分界面屏幕横屏故我们先设置项目只能竖屏,如下:在AppDelega...

  • iOS-屏幕旋转截屏相关

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

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

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

  • Flutter 让页面横屏显示

    有两种方法,达到横屏显示的效果: 旋转屏幕旋转屏幕比较麻烦:进入这个页面需要设置横屏。退出这个页面需要设置为竖屏。...

  • 个别界面强制横屏

    #import "UINavigationController+InterfaceOrientation.h" @...

  • iOS横屏的深入研究

    iOS横屏模式分2种:跟随系统自动旋转、强制横屏。无论哪种横屏模式,都有2中实现途径:1.重写系统旋转方法。2.对...

网友评论

      本文标题:ResideMenu+个别界面横屏+屏幕不跟随重力旋转

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