将屏幕从纵向转换为横向时,将其从左向右旋转时并不能保持横向,反之亦然

时间:2018-09-11 17:07:49

标签: ios swift3 swift4 landscape-portrait

我确实按照屏幕要求更改了uidevice的方向。

例如屏幕A 我只需要做肖像。

屏幕B 应该是风景,我做到了。

但是在回到屏幕A之后,我又回到屏幕B,并从左到右或从右到左旋转设备,屏幕B的方向变为纵向。

如果有人对此有解决方案,请发表评论。

在这里,我将解释整个方案,我在我的项目中正在做什么:

AppDelegate.swift

var orientationLock = UIInterfaceOrientationMask.portrait   //Defined variable for orientation

func application(_ application: UIApplication,
                 supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    return shouldRotate ? .allButUpsideDown : .portrait
}

A类

   override func viewWillAppear(_ animated: Bool) {
       super.viewWillAppear(animated)
        let value = UIInterfaceOrientation.portrait.rawValue
        UIDevice.current.setValue(value, forKey: "orientation")
        Global.appDelegate.shouldRotate = false
    }

B类

DispatchQueue.main.async {
    let value = UIInterfaceOrientation.landscapeLeft.rawValue
    UIDevice.current.setValue(value, forKey: "orientation")
}
Global.appDelegate.shouldRotate = false

现在,我尝试使B屏幕横向旋转,为此我尝试了以下方法:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    coordinator.animate(alongsideTransition: nil, completion: {
        _ in
        if UIDevice.current.orientation == .portrait || UIDevice.current.orientation == .portraitUpsideDown {
            //                Global.AppUtility.lockOrientation(.landscape)
            let value = UIInterfaceOrientation.landscapeLeft.rawValue
            UIDevice.current.setValue(value, forKey: "orientation")
            Global.appDelegate.shouldRotate = true
        }
    })

}

但是此方法仅在第一次使用时有效,选择A后再次进入屏幕B,它保持纵向。

0 个答案:

没有答案