From f9c177496e56207a262ae2d035fc15a1607d836f Mon Sep 17 00:00:00 2001 From: satishVekariya Date: Tue, 9 Jan 2018 14:11:24 +0530 Subject: [PATCH 1/2] Add pager view visibleCells property This method returns the complete list of visible cells displayed by the pager view. --- Sources/FSPagerView.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Sources/FSPagerView.swift b/Sources/FSPagerView.swift index 6e3af53..6d2d866 100644 --- a/Sources/FSPagerView.swift +++ b/Sources/FSPagerView.swift @@ -196,6 +196,10 @@ open class FSPagerView: UIView,UICollectionViewDataSource,UICollectionViewDelega open var panGestureRecognizer: UIPanGestureRecognizer { return self.collectionView.panGestureRecognizer } + ///Returns an array of visible cells currently displayed by the pager view. + open var visibleCells: [FSPagerViewCell] { + return self.collectionView.visibleCells as! [FSPagerViewCell] + } @objc open internal(set) dynamic var currentIndex: Int = 0 From 3380bbb47b05cfe0e098de6b369a91d7516419ff Mon Sep 17 00:00:00 2001 From: "satish.v" Date: Thu, 3 May 2018 13:13:02 +0530 Subject: [PATCH 2/2] Add Support for single item scrolling interaction --- Sources/FSPagerView.swift | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Sources/FSPagerView.swift b/Sources/FSPagerView.swift index 6d2d866..ec67a9f 100644 --- a/Sources/FSPagerView.swift +++ b/Sources/FSPagerView.swift @@ -196,11 +196,15 @@ open class FSPagerView: UIView,UICollectionViewDataSource,UICollectionViewDelega open var panGestureRecognizer: UIPanGestureRecognizer { return self.collectionView.panGestureRecognizer } - ///Returns an array of visible cells currently displayed by the pager view. + + /// Returns an array of visible cells currently displayed by the pager view. open var visibleCells: [FSPagerViewCell] { return self.collectionView.visibleCells as! [FSPagerViewCell] } + /// To disable or enable multi scrolling interaction + open var isMultiScrollInteractionEnable = true + @objc open internal(set) dynamic var currentIndex: Int = 0 // MARK: - Private properties @@ -242,6 +246,9 @@ open class FSPagerView: UIView,UICollectionViewDataSource,UICollectionViewDelega } fileprivate var possibleTargetingIndexPath: IndexPath? + fileprivate var offsetAtBegin:CGPoint? { + didSet { if isMultiScrollInteractionEnable { offsetAtBegin = nil } } + } // MARK: - Overriden functions @@ -369,6 +376,14 @@ open class FSPagerView: UIView,UICollectionViewDataSource,UICollectionViewDelega } public func scrollViewDidScroll(_ scrollView: UIScrollView) { + if let offset = offsetAtBegin { + let pageSide:CGFloat = collectionViewLayout.itemSpacing + if scrollView.contentOffset.x > offset.x + pageSide { + scrollView.contentOffset.x = offset.x + pageSide + } else if scrollView.contentOffset.x < offset.x - pageSide { + scrollView.contentOffset.x = offset.x - pageSide + } + } if self.numberOfItems > 0 { // In case someone is using KVO let currentIndex = lround(Double(self.scrollOffset)) % self.numberOfItems @@ -389,6 +404,7 @@ open class FSPagerView: UIView,UICollectionViewDataSource,UICollectionViewDelega if self.automaticSlidingInterval > 0 { self.cancelTimer() } + offsetAtBegin = scrollView.contentOffset } public func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer) { @@ -400,12 +416,16 @@ open class FSPagerView: UIView,UICollectionViewDataSource,UICollectionViewDelega if self.automaticSlidingInterval > 0 { self.startTimer() } + if velocity == .zero { + offsetAtBegin = nil + } } public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { if let function = self.delegate?.pagerViewDidEndDecelerating { function(self) } + offsetAtBegin = nil } public func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {