Проблема с анимацией при использовании UIView.transition и UIView.AnimationOptions при переходе между ViewControllers

Я использую Swift и пытаюсь перейти между ViewController экрана меню (LaunchViewController) и Game ViewController (InGameViewController), используя приведенный ниже код. Однако, хотя переход работает нормально, независимо от того, какие параметры анимации я использую (в настоящее время использую .transitionCrossDissolve), анимация всегда появляется из верхнего левого угла, расширяясь на весь экран. Я могу изменить продолжительность, и анимация настраивается так, как ожидалось, но независимо от того, какой UIView.AnimationOption я использую, он всегда использует одну и ту же анимацию.

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "InGameViewController")
vc.view.frame = (self.view?.frame)!
vc.view.layoutIfNeeded()

UIView.transition(with: self.view!, duration: 0.3, options: .transitionCrossDissolve, animations: {

            self.view?.window?.rootViewController = vc

        }, completion: { (true) in

        })

Как я могу сделать эту анимацию перехода по желанию? Спасибо заранее


person ecjps82    schedule 09.02.2020    source источник


Ответы (1)


func changeRootViewControllerTo(_ controller: UIViewController, animated: Bool = false) {

    UIApplication.shared.keyWindow?.rootViewController = controller

    guard
        animated,
        let window = UIApplication.shared.keyWindow else {
            return
    }

    UIView.transition(with: window,
                      duration: 0.3,
                      options: .transitionCrossDissolve,
                      animations: nil,
                      completion: nil)
}

В моем случае это работает идеально. Я не думаю, что вам нужно добавлять эти строки
vc.view.frame = (self.view?.frame)! vc.view.layoutIfNeeded()
и менять self.view на window в методе перехода.

person Владислав Шматок    schedule 09.02.2020
comment
Спасибо большое! Это сработало. Очень признателен. - person ecjps82; 11.02.2020
comment
@ ecjps82 с удовольствием, тогда выберите это как ответ. - person Владислав Шматок; 11.02.2020