У меня есть vc1, который представляет контроллер навигации, который содержит vc2.Проекция между vc1 и контроллером навигации - «Представлять модально», vc2 появляется со стандартной анимацией, снизу вверх.
Я хочу представить vc2, встроенный в контроллер навигации, из vc1 с пользовательской анимацией перехода.
Пример раскадровки
Я пробовал
class CustomAnimator: NSObject {
func animationDuration() -> TimeInterval {
return 1.0
}
fileprivate func animateCustomTransition(using transitionContext: UIViewControllerContextTransitioning) {
// ...
}
}
extension CustomAnimator: UIViewControllerAnimatedTransitioning {
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return animationDuration()
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
animateCustomTransition(using: transitionContext)
}
}
class CustomTransitionDelegate: NSObject {
let animator: CustomAnimator
override init() {
animator = CustomAnimator()
super.init()
}
}
extension CustomTransitionDelegate: UIViewControllerTransitioningDelegate {
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self.animator
}
}
class Vc2ViewController: UIViewController {
// ...
var customTranstionDelegate = CustomTransitionDelegate()
//...
}
А затем:
(1) Установите значение transitioningDelegate для vc2.Очевидно, никакого эффекта.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let navController = segue.destination as? UINavigationController {
if let controller = navController.viewControllers.first as? Vc2ViewController {
controller.transitioningDelegate = controller.customTranstionDelegate
}
}
}
(2) Подкласс UINavigationController и установите его transitioningDelegate.vc2 появляется нужным образом, но панель навигации исчезла, и следующий контроллер просмотра после vc2 не появляется в «Show» segue.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let controller = segue.destination as? Vc2NavigationController {
controller.transitioningDelegate = controller.customTranstionDelegate
}
}
Как я могу представить vc2, встроенный в контроллер навигации, из vc1с пользовательской анимацией перехода?