From a75b607be2416f29a1310e7442665776cc96554e Mon Sep 17 00:00:00 2001 From: closure11 Date: Mon, 31 Oct 2022 10:39:46 +0800 Subject: [PATCH] Add didTransition in PanModalPresentable delegate --- .../Controller/PanModalPresentationController.swift | 13 ++++++++++--- .../Presentable/PanModalPresentable+Defaults.swift | 4 ++++ PanModal/Presentable/PanModalPresentable.swift | 7 +++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/PanModal/Controller/PanModalPresentationController.swift b/PanModal/Controller/PanModalPresentationController.swift index 05e3e6a6..fa6280e2 100644 --- a/PanModal/Controller/PanModalPresentationController.swift +++ b/PanModal/Controller/PanModalPresentationController.swift @@ -259,11 +259,15 @@ public extension PanModalPresentationController { presentable?.willTransition(to: state) + let completion: () -> Void = { [weak self] in + self?.presentable?.didTransition(to: state) + } + switch state { case .shortForm: - snap(toYPosition: shortFormYPosition) + snap(toYPosition: shortFormYPosition, completion: completion) case .longForm: - snap(toYPosition: longFormYPosition) + snap(toYPosition: longFormYPosition, completion: completion) } } @@ -643,12 +647,15 @@ private extension PanModalPresentationController { return (abs(velocity) - (1000 * (1 - Constants.snapMovementSensitivity))) > 0 } - func snap(toYPosition yPos: CGFloat) { + func snap(toYPosition yPos: CGFloat, completion: (() -> Void)? = nil) { PanModalAnimator.animate({ [weak self] in self?.adjust(toYPosition: yPos) self?.isPresentedViewAnimating = true }, config: presentable) { [weak self] didComplete in self?.isPresentedViewAnimating = !didComplete + if didComplete { + completion?() + } } } diff --git a/PanModal/Presentable/PanModalPresentable+Defaults.swift b/PanModal/Presentable/PanModalPresentable+Defaults.swift index 76a0679f..e9b82ef6 100644 --- a/PanModal/Presentable/PanModalPresentable+Defaults.swift +++ b/PanModal/Presentable/PanModalPresentable+Defaults.swift @@ -117,6 +117,10 @@ public extension PanModalPresentable where Self: UIViewController { } + func didTransition(to state: PanModalPresentationController.PresentationState) { + + } + func panModalWillDismiss() { } diff --git a/PanModal/Presentable/PanModalPresentable.swift b/PanModal/Presentable/PanModalPresentable.swift index 76c15015..1cd9b301 100644 --- a/PanModal/Presentable/PanModalPresentable.swift +++ b/PanModal/Presentable/PanModalPresentable.swift @@ -220,6 +220,13 @@ public protocol PanModalPresentable: AnyObject { */ func willTransition(to state: PanModalPresentationController.PresentationState) + /** + Notifies the delegate that the pan modal transitioned to a new state. + + Default value is an empty implementation. + */ + func didTransition(to state: PanModalPresentationController.PresentationState) + /** Notifies the delegate that the pan modal is about to be dismissed.