Я изменил ориентацию 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, он сохраняет его портрет.