我确实按照屏幕要求更改了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,它保持纵向。