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

目前我们常用的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相关内容。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 当然这篇文章也不错。http://www.jianshu.com/p/d2cd436e2bc0如果不给GameOb...
    此年此景阅读 3,868评论 0 1
  • 前两天,一朋友聚会时说起上小学的儿子该怎么学英语,自己口语不好,教了怕起反作用。 送培训学校吧,不但资质良莠不齐,...
    陈千寻阅读 7,978评论 8 22
  • 如果你不懂诗,不要轻易的去碰诗歌。 如果你不懂现代诗,就更不要去碰现代诗歌。 而我不小心碰了,结果一个多月也没写不...
    苏二读书阅读 5,317评论 0 9

友情链接更多精彩内容