Я пытаюсь создать анимацию easyInEaseOut для своих контроллеров представления, однако, когда я пытаюсь анимировать представления «до» и «от», представление «от» становится черным, пока анимация не будет завершена. Если я анимирую только представление «до», то новый контроллер представления анимируется правильно, но поверх представления «от». Я хотел бы, чтобы оба этих представления двигались вместе, чтобы создавалось впечатление, что первое соскальзывает, чтобы освободить место для второго (я полагаю, что второе отталкивает его более точно). Может ли кто-нибудь сказать мне, почему это будет? Я пытался поиграть с многочисленными настройками, см. код ниже:
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
guard let toVC = transitionContext.viewController(forKey: .to), let fromVC = transitionContext.viewController(forKey: .from) else {
dLog("No to or from VC")
transitionContext.completeTransition(false)
return
}
switch animationType {
case .present:
dLog("Present VC")
transitionContext.containerView.addSubview(fromVC.view)
transitionContext.containerView.addSubview(toVC.view)
presentAnimation(with: transitionContext, fromView: fromVC.view, toView: toVC.view)
case .dismiss:
dLog("Dismiss VC")
}
}
func presentAnimation(with transitionContext: UIViewControllerContextTransitioning, fromView: UIView, toView: UIView) {
fromView.clipsToBounds = true
toView.clipsToBounds = true
fromView.transform = CGAffineTransform(translationX: 0, y: 0)
toView.transform = CGAffineTransform(translationX: toView.frame.size.width, y: 0)
let duration = transitionDuration(using: transitionContext)
UIView.animate(withDuration: duration, delay: 0.0, usingSpringWithDamping: 0.0, initialSpringVelocity: 0.0, options: .curveEaseInOut, animations: {
toView.transform = CGAffineTransform(translationX: 0.0, y: 0.0)
fromView.transform = CGAffineTransform(translationX: -fromView.frame.size.width, y: 0)
}) { _ in
transitionContext.completeTransition(true)
}
}