美文网首页iOS-SwiftiOS-小技巧
【iOS开发】在特定的View Controller允许屏幕旋转

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

作者: Lebron_James | 来源:发表于2017-10-23 13:32 被阅读71次

    目前我们常用的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允许屏幕旋转

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