Я должен был сделать что-то похожее на это. Вот наш подход.
Мы устанавливаем ориентацию проекта так, чтобы она поддерживала только портретный режим.
Затем в вашем AppDelegate
добавьте переменную экземпляра для ориентации и выполните метод делегирования supportedInterfaceOrientationsFor
.
static var orientationLock = UIInterfaceOrientationMask.portrait
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return AppDelegate.orientationLock
}
Затем, когда вы собираетесь представить ландшафтный вид, выполните следующие действия:
AppDelegate.orientationLock = UIInterfaceOrientationMask.landscapeLeft
UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()
И при увольнении
AppDelegate.orientationLock = UIInterfaceOrientationMask.portrait
UIDevice.current.setValue(UIInterfaceOrientation.portrait, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()
Надеюсь, это поможет!