From 0c355030ef55bed99fb88c95a824ddc184aa83b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Fontana?= Date: Wed, 13 Nov 2024 09:59:24 +0100 Subject: [PATCH 1/2] feat: add support for `scrollViewDidEndScrollingAnimation(_:)` delegate method --- Sources/ScrollStackController/ScrollStack.swift | 8 ++++++++ .../Support/ScrollStack+Protocols.swift | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/Sources/ScrollStackController/ScrollStack.swift b/Sources/ScrollStackController/ScrollStack.swift index 992f3a3..c46307c 100644 --- a/Sources/ScrollStackController/ScrollStack.swift +++ b/Sources/ScrollStackController/ScrollStack.swift @@ -1066,6 +1066,14 @@ open class ScrollStack: UIScrollView, UIScrollViewDelegate { dispatchRowsVisibilityChangesTo(stackDelegate) } + public func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) { + guard let stackDelegate = stackDelegate else { + return + } + + stackDelegate.scrollStackDidEndScrollingAnimation(self) + } + open override func layoutSubviews() { super.layoutSubviews() diff --git a/Sources/ScrollStackController/Support/ScrollStack+Protocols.swift b/Sources/ScrollStackController/Support/ScrollStack+Protocols.swift index 204ac98..896c2c0 100644 --- a/Sources/ScrollStackController/Support/ScrollStack+Protocols.swift +++ b/Sources/ScrollStackController/Support/ScrollStack+Protocols.swift @@ -68,6 +68,11 @@ public protocol ScrollStackControllerDelegate: AnyObject { /// - Parameter offset: current scroll offset. func scrollStackDidScroll(_ stackView: ScrollStack, offset: CGPoint) + /// Tells the delegate when a scrolling animation in the scroll view concludes. + /// + /// - Parameter stackView: The ScrollStack object that’s performing the scrolling animation. + func scrollStackDidEndScrollingAnimation(_ stackView: ScrollStack) + /// Row did become partially or entirely visible. /// /// - Parameter row: target row. From b47668b5a1c475118d4c18745b73432417d9544a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Fontana?= Date: Wed, 13 Nov 2024 15:33:42 +0100 Subject: [PATCH 2/2] chore: update README --- README.md | 50 +++++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 4d31e64..7de0307 100644 --- a/README.md +++ b/README.md @@ -634,33 +634,37 @@ Example: ```swift class ViewController: ScrollStackController, ScrollStackControllerDelegate { - - func viewDidLoad() { - super.viewDidLoad() - - self.scrollStack.stackDelegate = self - } - - func scrollStackDidScroll(_ stackView: ScrollStack, offset: CGPoint) { - // stack did scroll - } - - func scrollStackRowDidBecomeVisible(_ stackView: ScrollStack, row: ScrollStackRow, index: Int, state: ScrollStack.RowVisibility) { - // Row did become partially or entirely visible. - } + + func viewDidLoad() { + super.viewDidLoad() + + self.scrollStack.stackDelegate = self + } + + func scrollStackDidScroll(_ stackView: ScrollStack, offset: CGPoint) { + // Stack did scroll + } - func scrollStackRowDidBecomeHidden(_ stackView: ScrollStack, row: ScrollStackRow, index: Int, state: ScrollStack.RowVisibility) { - // Row did become partially or entirely invisible. - } + + func scrollStackDidEndScrollingAnimation(_ stackView: ScrollStack) { + // Scrolling animation has ended + } - func scrollStackDidUpdateLayout(_ stackView: ScrollStack) { - // This function is called when layout is updated (added, removed, hide or show one or more rows). - } + func scrollStackRowDidBecomeVisible(_ stackView: ScrollStack, row: ScrollStackRow, index: Int, state: ScrollStack.RowVisibility) { + // Row did become partially or entirely visible. + } - func scrollStackContentSizeDidChange(_ stackView: ScrollStack, from oldValue: CGSize, to newValue: CGSize) { - // This function is called when content size of the stack did change (remove/add, hide/show rows). - } + func scrollStackRowDidBecomeHidden(_ stackView: ScrollStack, row: ScrollStackRow, index: Int, state: ScrollStack.RowVisibility) { + // Row did become partially or entirely invisible. + } + func scrollStackDidUpdateLayout(_ stackView: ScrollStack) { + // This function is called when layout is updated (added, removed, hide or show one or more rows). + } + + func scrollStackContentSizeDidChange(_ stackView: ScrollStack, from oldValue: CGSize, to newValue: CGSize) { + // This function is called when content size of the stack did change (remove/add, hide/show rows). + } } ```