From 1a91d899bea1ef7d4bdb0ff74dc9efaa4760bf56 Mon Sep 17 00:00:00 2001 From: Dominic Go Date: Wed, 2 Oct 2024 19:00:00 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20Fix:=20`ModalSheetPresentationSt?= =?UTF-8?q?ateMachine`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModalSheetPresentationStateMachine.swift | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/ios/Temp/ModalSheetPresentationStateMachine.swift b/ios/Temp/ModalSheetPresentationStateMachine.swift index 83610b8d..08875edc 100644 --- a/ios/Temp/ModalSheetPresentationStateMachine.swift +++ b/ios/Temp/ModalSheetPresentationStateMachine.swift @@ -243,6 +243,10 @@ extension ModalSheetPresentationStateMachine: ViewControllerLifecycleNotifiable sender: UIViewController, isAnimated: Bool ) { + guard !self.isSheetPanGestureActive else { + return; + }; + self.setState(nextState: .dismissing); }; @@ -266,17 +270,12 @@ extension ModalSheetPresentationStateMachine: ModalSheetViewControllerEventsNoti self.setState(nextState: .presentingViaGestureCancelled); }; - public func notifyOnSheetDidDismissViaGesture( - sender: UIViewController, - presentationController: UIPresentationController - ) { - self.setState(nextState: .dismissedViaGesture); - }; - public func notifyOnSheetWillDismissViaGesture( sender: UIViewController, presentationController: UIPresentationController ) { + self.isSheetPanGestureActive = true; + guard let transitionCoordinator = sender.transitionCoordinator else { return; }; @@ -295,6 +294,13 @@ extension ModalSheetPresentationStateMachine: ModalSheetViewControllerEventsNoti }; }; + public func notifyOnSheetDidDismissViaGesture( + sender: UIViewController, + presentationController: UIPresentationController + ) { + self.setState(nextState: .dismissedViaGesture); + }; + public func notifyOnSheetBeingDraggedByPanGesture( sender: UIViewController, panGesture: UIPanGestureRecognizer @@ -306,6 +312,7 @@ extension ModalSheetPresentationStateMachine: ModalSheetViewControllerEventsNoti switch panGesture.state { case .began, .changed: self.isSheetPanGestureActive = true; + self.setState(nextState: .draggingViaGesture); case .ended, .cancelled, .failed: self.isSheetPanGestureActive = false; @@ -313,7 +320,5 @@ extension ModalSheetPresentationStateMachine: ModalSheetViewControllerEventsNoti default: break; }; - - self.setState(nextState: .draggingViaGesture); }; };