Как исправить ориентацию AlertView на конкретном контроллере?

#ios #swift

#iOS #swift

Вопрос:

Я хочу исправить ориентацию определенных контроллеров.

Я пробовал больше раз, но не смог исправить. Я исправил ориентацию контроллера в методе appdelegate (supportedInterfaceOrientationsFor), но причина ориентации предупреждающего сообщения не работает должным образом, а затем работает нормально. Я имею в виду, что это работает для всех типов ориентации.

 func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    if !UIDevice.isIphone() {
        let controller = (application.keyWindow?.rootViewController as? UINavigationController)?.visibleViewController
        if controller is LiveStreamViewController || controller is VideoStreamingViewController {
            return .portrait
        } else {
            return .all
        }
    } else {
        return .portrait
    }
}
 

Комментарии:

1. Неясно, какова цель и что происходит вместо этого.

Ответ №1:

Ориентация «конкретного контроллера» не определяется реализацией application(_:supportedInterfaceOrientationsFor:) . Это определяется изнутри конкретного контроллера путем реализации supportedInterfaceOrientations . И даже тогда это значение не учитывается, если ваш контроллер просмотра не является самым верхним.

Ответ №2:

Предупреждающий вид угрюмо прогнил в соответствии с Orientation , но если не работает, то попробуйте использовать приведенный ниже код

  func didPresent(_ alertView: UIAlertView) {
        // UIAlertView in landscape mode for specific controller?
        UIView.beginAnimations("", context: nil)
        UIView.setAnimationDuration(0.1)
        alertView.transform = alertView.transform.rotated(by: 3.14159 / 2)
        UIView.commitAnimations()
    }