Проблема с анимацией при использовании UIView.transition & UIView.AnimationOptions при переходе между ViewControllers - PullRequest
1 голос
/ 10 февраля 2020

Я использую 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

        })

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

1 Ответ

0 голосов
/ 10 февраля 2020
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 в методе перехода.

...