@@ -33,6 +33,22 @@ class PagerScrollDelegate: NSObject, UIScrollViewDelegate, UICollectionViewDeleg
3333 delegate? . onPageScroll ( data: eventData)
3434 originalDelegate? . scrollViewDidScroll ? ( scrollView)
3535 }
36+
37+ /// Emits a final onPageScroll with offset 0 before transitioning to idle,
38+ /// clearing any residual floating-point offset from the scroll animation.
39+ private func emitIdleWithCleanOffset( _ scrollView: UIScrollView ) {
40+ let isHorizontal = orientation == . horizontal
41+ let pageSize = isHorizontal ? scrollView. frame. width : scrollView. frame. height
42+ let contentOffset = isHorizontal ? scrollView. contentOffset. x : scrollView. contentOffset. y
43+
44+ if pageSize > 0 {
45+ let page = Int ( round ( contentOffset / pageSize) )
46+ let eventData = OnPageScrollEventData ( position: Double ( page) , offset: 0 )
47+ delegate? . onPageScroll ( data: eventData)
48+ }
49+
50+ delegate? . onPageScrollStateChanged ( state: . idle)
51+ }
3652
3753 func scrollViewWillBeginDragging( _ scrollView: UIScrollView ) {
3854 delegate? . onPageScrollStateChanged ( state: . dragging)
@@ -45,18 +61,18 @@ class PagerScrollDelegate: NSObject, UIScrollViewDelegate, UICollectionViewDeleg
4561 }
4662
4763 func scrollViewDidEndDecelerating( _ scrollView: UIScrollView ) {
48- delegate ? . onPageScrollStateChanged ( state : . idle )
64+ emitIdleWithCleanOffset ( scrollView )
4965 originalDelegate? . scrollViewDidEndDecelerating ? ( scrollView)
5066 }
51-
67+
5268 func scrollViewDidEndScrollingAnimation( _ scrollView: UIScrollView ) {
53- delegate ? . onPageScrollStateChanged ( state : . idle )
69+ emitIdleWithCleanOffset ( scrollView )
5470 originalDelegate? . scrollViewDidEndScrollingAnimation ? ( scrollView)
5571 }
56-
72+
5773 func scrollViewDidEndDragging( _ scrollView: UIScrollView , willDecelerate decelerate: Bool ) {
5874 if !decelerate {
59- delegate ? . onPageScrollStateChanged ( state : . idle )
75+ emitIdleWithCleanOffset ( scrollView )
6076 }
6177 originalDelegate? . scrollViewDidEndDragging ? ( scrollView, willDecelerate: decelerate)
6278 }
0 commit comments