Как установить контекст перехода для представления контроллера представления - PullRequest
0 голосов
/ 21 мая 2019

Я использую протокол UIViewControllerTransitioningDelegate, чтобы иметь хороший переход между двумя контроллерами представления, где представляющий контроллер представления вложен в другой контроллер представления.

Проблема теперь состоит в том, что представленный контроллер представления не отклоняется, когда текущий контроллер представления отклоняется.

Итак, моя иерархия контроллера представления выглядит следующим образом:

VC1 имеет свойство, содержащее ссылку VC2. VC2 в какой-то момент он представляет VC3, который реализует UIViewControllerTransitioningDelegate.

Ссылка VC2 имеет didSet:

var vc2: VC2? {
    didSet {
        if let vc = vc2 {
            anotherController.addChild(vc)
            view.setSubview(vc.view, removeSubviews: false)
            vc.didMove(toParent: anotherController)
        } else if let dismissed = oldValue {
            dismissed.willMove(toParent: nil)
            view.subviews.forEach { $0.removeFromSuperview() }
            dismissed.removeFromParent()
        }
    }
}

Как уже было сказано, VC3 реализует протокол UIViewControllerTransitioningDelegate и UIViewControllerAnimatedTransitioning. Моя реализация для func animateTransition(using transitionContext: UIViewControllerContextTransitioning) выглядит следующим образом:

guard let toVC = transitionContext.viewController(forKey: .to) else { return }

let containerView = transitionContext.containerView

if presenting {
    containerView.addSubview(toVC.view)

    // some animation
} else {
    // some reverse animation
}

VC2 звонит VC3 довольно стандартным способом:

let vc = VC3()
self.present(vc, animated: true)

Странная вещь в том, что в этом методе transitionContext.viewController(forKey: .from) возвращает VC1 вместо VC2, хотя VC2 представляет VC3, таким образом, когда VC2 отклоняется, VC3 не удален. Таким образом, containerView будет также VC1 вместо VC2.

Как мне убедиться, что вид VC3 корректно отклоняется, когда VC2 отклоняется?

...