MultibleWindows 旋转解决方案

249 阅读2分钟

一些夸张的UI Bug可能都与旋转问题有关

写在开头:每一名开发者都有一颗成为大牛的心,但是至于你是否能够成功,坚持往下走就对了。

旋转的基本开关

你应该知道的基本开关:

KeyImage

OK,我的建议是如果是iPhone的话,开启portriat、landscape left、landscape right。iPad应用的话四种全开。

整个应用的旋转思想

www.jianshu.com/p/59732e924…
推荐这个文章用来解决你的APP整体旋转解决方案:基本的思路是在基类中做事情。
之后继承基类的VC,如果需要定制旋转方向的话,那么你需要重写下面两个属性:

override var shouldAutorotate: Bool {
	return true
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .portrait
}

Mutible WIndows 的旋转问题处理

这类旋转问题的可能性主要存在于2个及2个以上的WIndow的处理,我这边主要是针对于两个Window所做的处理,如果Window的数目不断增加,我这个方案的适用性确实是值得商榷的。
下面说一下我这个方案的主要思路 :

  1. 首先实现AppDelegate里的代理方法:
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
  1. 主Window必须要有一个TabBarController或者NavigationControllr,同样重写VC的两个属性。
  2. 此时控制整个APP选择方向的代码放到Appdelegate中进行统一管理

注意点:

  1. 如果MainWindow仅支持竖屏,但是AnotherWindow支持横屏模式的话。如果你从AotherWindow横屏的时候返回仅支持竖屏的MainWindow。记得强制旋转屏幕,不然:
    LandscapeImage

    你的MainWindow也会变得横屏一下。
  2. 还有MainWindow一定要用TabBarController,不然限制不了MainWindow始终保持竖屏。会出现UIStatusBar旋转,但是界面不旋转的Bug。
  3. 还有一点是:控制旋转的主要功能代码是在Appdelegate中根据Window的隐藏去判断旋转方向。

Demo

一个小demo,欢迎大家提出问题改正: github.com/WadeZhao23/…