@@ -29,6 +29,7 @@ extension AnyRemovingTransition {
2929extension AnyRemovingInteraction {
3030 public enum Contextual {
3131
32+ // dismissing semantics
3233 // TODO: naming
3334 @MainActor
3435 public static func runEnclosing(
@@ -37,22 +38,21 @@ extension AnyRemovingInteraction {
3738 destinationComponent: ContextualTransitionSourceComponentType,
3839 gestureVelocity: CGPoint?
3940 ) {
41+
42+ let fromViewSnapshotMaskView = UIView()
43+ fromViewSnapshotMaskView.backgroundColor = .black
44+ fromViewSnapshotMaskView.frame = transitionContext.fromViewController.view.bounds
4045
41- let draggingView = disclosedView
42-
43- let maskView = UIView()
44- maskView.backgroundColor = .black
45- maskView.frame = transitionContext.fromViewController.view.bounds
46-
47- let fromViewMirror = AnyMirrorViewProvider.snapshot(
46+ // the reason why making snapshot is the from view will be removed from tree
47+ let fromViewSnapshot = AnyMirrorViewProvider.snapshot(
4848 caches: true,
4949 viewProvider: { transitionContext.fromViewController.view! }
5050 ).view()
5151
52- fromViewMirror .mask = maskView
53- fromViewMirror .alpha = 1
54- fromViewMirror .frame = transitionContext.fromViewController.view.frame
55-
52+ fromViewSnapshot .mask = fromViewSnapshotMaskView
53+ fromViewSnapshot .alpha = 1
54+ fromViewSnapshot .frame = transitionContext.fromViewController.view.layer.activeLayer() .frame
55+
5656 let entrypointMirrorView = AnyMirrorViewProvider.portal(
5757 view: destinationComponent.contentView,
5858 hidesSourceOnUsing: true
@@ -71,7 +71,7 @@ extension AnyRemovingInteraction {
7171 // layering
7272 do {
7373 reparentingView.addSubview(entrypointMirrorView)
74- reparentingView.addSubview(fromViewMirror )
74+ reparentingView.addSubview(fromViewSnapshot )
7575 }
7676
7777 // places entrypoint mirror view in the current moving view to make cross-fade
@@ -96,7 +96,7 @@ extension AnyRemovingInteraction {
9696 transitionContext.addCompletionEventHandler { _ in
9797 reparentingView.removeFromSuperview()
9898 entrypointMirrorView.removeFromSuperview()
99- fromViewMirror .removeFromSuperview()
99+ fromViewSnapshot .removeFromSuperview()
100100 displayingSubscription.dispose()
101101 }
102102
@@ -109,11 +109,11 @@ extension AnyRemovingInteraction {
109109 do {
110110
111111 let translation = Geometry.centerAndScale(
112- from: fromViewMirror .frame,
112+ from: disclosedView.layer.activeLayer() .frame,
113113 to: CGRect(
114114 origin: transitionContext.frameInContentView(for: destinationComponent.contentView).origin,
115115 size: Geometry.sizeThatAspectFill(
116- aspectRatio: fromViewMirror .bounds.size,
116+ aspectRatio: fromViewSnapshot .bounds.size,
117117 minimumSize: destinationComponent.contentView.bounds.size
118118 )
119119 )
@@ -126,9 +126,12 @@ extension AnyRemovingInteraction {
126126 }
127127
128128 let targetCenter = translation.center
129+
130+ let draggingViewCenter = disclosedView.layer.activeLayer().position
131+
129132 let delta = CGPoint(
130- x: targetCenter.x - draggingView.center .x,
131- y: targetCenter.y - draggingView.center .y
133+ x: targetCenter.x - draggingViewCenter .x,
134+ y: targetCenter.y - draggingViewCenter .y
132135 )
133136
134137 var velocity = CGVector.init(
@@ -149,7 +152,7 @@ extension AnyRemovingInteraction {
149152 }()
150153
151154 Fluid.makePropertyAnimatorsForTranformUsingCenter(
152- view: fromViewMirror ,
155+ view: fromViewSnapshot ,
153156 duration: movingDuration,
154157 position: .custom(translation.center),
155158 scale: translation.scale,
@@ -163,11 +166,11 @@ extension AnyRemovingInteraction {
163166
164167 // mask
165168 UIViewPropertyAnimator(duration: 0.6, dampingRatio: 1) {
166- maskView .frame = transitionContext.fromViewController.view.bounds
167- maskView .frame.size.height = destinationComponent.contentView.bounds.height / translation.scale.y
168- maskView .layer.cornerRadius = 36
169+ fromViewSnapshotMaskView .frame = transitionContext.fromViewController.view.bounds
170+ fromViewSnapshotMaskView .frame.size.height = destinationComponent.contentView.bounds.height / translation.scale.y
171+ fromViewSnapshotMaskView .layer.cornerRadius = 36
169172 if #available(iOS 13.0, *) {
170- maskView .layer.cornerCurve = .continuous
173+ fromViewSnapshotMaskView .layer.cornerCurve = .continuous
171174 } else {
172175 // Fallback on earlier versions
173176 }
@@ -225,7 +228,7 @@ extension AnyRemovingInteraction {
225228 // cross-fade content
226229 do {
227230 UIViewPropertyAnimator(duration: movingDuration, dampingRatio: 1) {
228- fromViewMirror .alpha = 0
231+ fromViewSnapshot .alpha = 0
229232 entrypointMirrorView.alpha = 1
230233 }
231234 }
0 commit comments