@@ -75,14 +75,29 @@ - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionCo
7575}
7676
7777- (void )prepareTransitionContext : (id <UIViewControllerContextTransitioning>)transitionContext {
78- UINavigationController *toViewController =
79- [transitionContext viewControllerForKey: UITransitionContextToViewControllerKey];
80- toViewController.view .alpha = 0 ;
81- UIView *fromView = [transitionContext viewForKey: UITransitionContextFromViewKey];
82-
83- [transitionContext.containerView addSubview: fromView];
84- [transitionContext.containerView addSubview: toViewController.view];
85- [toViewController prepareForTransition ];
78+ UIViewController *fromViewController =
79+ [transitionContext viewControllerForKey: UITransitionContextFromViewControllerKey];
80+ UIViewController *toViewController =
81+ [transitionContext viewControllerForKey: UITransitionContextToViewControllerKey];
82+
83+ UIView *fromView = [transitionContext viewForKey: UITransitionContextFromViewKey];
84+ UIView *toView = [transitionContext viewForKey: UITransitionContextToViewKey];
85+
86+ BOOL isDismiss = (toView == nil );
87+
88+ if (isDismiss) {
89+ if (fromView) {
90+ [transitionContext.containerView addSubview: fromView];
91+ }
92+ } else {
93+ toViewController.view .alpha = 0 ;
94+ if (fromView) {
95+ [transitionContext.containerView addSubview: fromView];
96+ }
97+ [transitionContext.containerView addSubview: toViewController.view];
98+ }
99+
100+ [toViewController prepareForTransition ];
86101}
87102
88103- (NSArray *)createTransitionsFromVC : (UIViewController *)fromVC
@@ -121,13 +136,18 @@ - (void)performAnimationOnce {
121136
122137- (void )animateTransitions : (NSArray <id<DisplayLinkAnimatorDelegate>> *)animators
123138 andTransitioningContext : (id <UIViewControllerContextTransitioning>)transitionContext {
139+ UIView *toView = [transitionContext viewForKey: UITransitionContextToViewKey];
140+ BOOL isDismiss = (toView == nil );
141+
124142 DisplayLinkAnimator *displayLinkAnimator = [[DisplayLinkAnimator alloc ]
125143 initWithDisplayLinkAnimators: animators
126144 duration: [self transitionDuration: transitionContext]];
127145
128146 [displayLinkAnimator setOnStart: ^{
129- [transitionContext viewControllerForKey: UITransitionContextToViewControllerKey].view .alpha =
130- 1 .f ;
147+ UIViewController *toVC = [transitionContext viewControllerForKey: UITransitionContextToViewControllerKey];
148+ if (!isDismiss) {
149+ toVC.view .alpha = 1 .f ;
150+ }
131151 }];
132152
133153 [displayLinkAnimator setCompletion: ^{
@@ -170,9 +190,13 @@ - (void)animationEnded:(BOOL)transitionCompleted {
170190 UIView *toView = [_transitionContext viewForKey: UITransitionContextToViewKey];
171191 UIView *fromView = [_transitionContext viewForKey: UITransitionContextFromViewKey];
172192 [_sharedElementAnimator animationEnded ];
173- toView.layer .transform = CATransform3DIdentity;
174- fromView.layer .transform = CATransform3DIdentity;
175- toView.alpha = 1 .f ;
193+ if (toView) {
194+ toView.layer .transform = CATransform3DIdentity;
195+ toView.alpha = 1 .f ;
196+ }
197+ if (fromView) {
198+ fromView.layer .transform = CATransform3DIdentity;
199+ }
176200 _transitionContext = nil ;
177201 _sharedElementAnimator = nil ;
178202}
0 commit comments