【iOS开发】在特定的View Controller允许屏幕旋转

目前我们常用的iOS应用,大部分都是只支持竖屏。但是在某些View Controller中,我们想让应用支持横屏。经过查阅资料,总结出比较理想的实现步骤,如下:

1. 这三个支持的屏幕方向要勾上

【iOS开发】在特定的View Controller允许屏幕旋转_第1张图片
General.png

2. 在AppDelegate中,声明一个属性shouldAutorotate,默认为false,并且实现func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask方法,如下:

var shouldAutorotate = false
  func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    if shouldAutorotate {
      return .allButUpsideDown
    } else {
      return .portrait
    }
}

3. 在想要支持横屏的View Controller中:

// 1. 定义一个方法,控制是否要自动旋转
func allowAutorotate(allowed: Bool) {
    let appDelegate = UIApplication.shared.delegate as? AppDelegate
    appDelegate?.shouldAutorotate = allowed
}

// 2. 在viewDidLoad,允许自动旋转
override func viewDidLoad() {
    super.viewDidLoad()
    allowAutorotate(allowed: true)
}

// 3. 在deinit,禁止自动旋转
deinit {
    allowAutorotate(allowed: false)
}

// 4. 重写支持的屏幕方向 (可以不写)
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .allButUpsideDown
}

原理:在屏幕旋转时,系统会去读取AppDelegatefunc application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMaskViewControllersupportedInterfaceOrientations返回的UIInterfaceOrientationMask,并把这两个返回集合的交集作为最终的屏幕支持的方向。

有任何问题,欢迎大家留言!

欢迎加入我管理的Swift开发群:536353151,本群只讨论Swift相关内容。

原创文章,转载请注明出处。谢谢!

你可能感兴趣的:(【iOS开发】在特定的View Controller允许屏幕旋转)