Skip to content

Commit 0855d45

Browse files
authored
fix for fading modal dismissal (#8192)
1 parent 8a7297a commit 0855d45

File tree

1 file changed

+37
-13
lines changed

1 file changed

+37
-13
lines changed

ios/ScreenAnimationController.mm

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)