@@ -75,21 +75,13 @@ - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionCo
7575}
7676
7777- (void )prepareTransitionContext : (id <UIViewControllerContextTransitioning>)transitionContext {
78- UIViewController *fromViewController =
79- [transitionContext viewControllerForKey: UITransitionContextFromViewControllerKey];
8078 UIViewController *toViewController =
8179 [transitionContext viewControllerForKey: UITransitionContextToViewControllerKey];
8280
8381 UIView *fromView = [transitionContext viewForKey: UITransitionContextFromViewKey];
8482 UIView *toView = [transitionContext viewForKey: UITransitionContextToViewKey];
8583
86- BOOL isDismiss = (toView == nil );
87-
88- if (isDismiss) {
89- if (fromView) {
90- [transitionContext.containerView addSubview: fromView];
91- }
92- } else {
84+ if (toView) {
9385 toViewController.view .alpha = 0 ;
9486 if (fromView) {
9587 [transitionContext.containerView addSubview: fromView];
@@ -137,26 +129,39 @@ - (void)performAnimationOnce {
137129- (void )animateTransitions : (NSArray <id<DisplayLinkAnimatorDelegate>> *)animators
138130 andTransitioningContext : (id <UIViewControllerContextTransitioning>)transitionContext {
139131 UIView *toView = [transitionContext viewForKey: UITransitionContextToViewKey];
132+ UIViewController *fromVC = [transitionContext viewControllerForKey: UITransitionContextFromViewControllerKey];
133+
140134 BOOL isDismiss = (toView == nil );
141135
142- DisplayLinkAnimator *displayLinkAnimator = [[DisplayLinkAnimator alloc ]
143- initWithDisplayLinkAnimators: animators
144- duration: [self transitionDuration: transitionContext]];
145-
146- [displayLinkAnimator setOnStart: ^{
147- UIViewController *toVC = [transitionContext viewControllerForKey: UITransitionContextToViewControllerKey];
136+ if (isDismiss) {
137+ [UIView animateWithDuration: [self transitionDuration: transitionContext]
138+ animations: ^{
139+ fromVC.view .alpha = 0 ;
140+ } completion: ^(BOOL finished) {
141+ [transitionContext completeTransition: ![transitionContext transitionWasCancelled ]];
142+ fromVC.view .alpha = 1 ;
143+ }];
144+ return ;
145+ }
146+
147+ DisplayLinkAnimator *displayLinkAnimator = [[DisplayLinkAnimator alloc ]
148+ initWithDisplayLinkAnimators: animators
149+ duration: [self transitionDuration: transitionContext]];
150+
151+ [displayLinkAnimator setOnStart: ^{
148152 if (!isDismiss) {
153+ UIViewController *toVC = [transitionContext viewControllerForKey: UITransitionContextToViewControllerKey];
149154 toVC.view .alpha = 1 .f ;
150155 }
151- }];
152-
153- [displayLinkAnimator setCompletion: ^{
154- if (![transitionContext transitionWasCancelled ]) {
155- [transitionContext completeTransition: ![transitionContext transitionWasCancelled ]];
156- }
157- }];
158-
159- [displayLinkAnimator start ];
156+ }];
157+
158+ [displayLinkAnimator setCompletion: ^{
159+ if (![transitionContext transitionWasCancelled ]) {
160+ [transitionContext completeTransition: ![transitionContext transitionWasCancelled ]];
161+ }
162+ }];
163+
164+ [displayLinkAnimator start ];
160165}
161166
162167- (NSTimeInterval )transitionDuration : (id <UIViewControllerContextTransitioning>)transitionContext {
0 commit comments