diff --git a/FSPagerViewExamples.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/FSPagerViewExamples.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/FSPagerViewExamples.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/Sources/FSPagerView.swift b/Sources/FSPagerView.swift
index 7fb17d9..c46b18f 100644
--- a/Sources/FSPagerView.swift
+++ b/Sources/FSPagerView.swift
@@ -214,6 +214,14 @@ open class FSPagerView: UIView,UICollectionViewDataSource,UICollectionViewDelega
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]
+ }
+
+ /// To disable or enable multi scrolling interaction
+ open var isMultiScrollInteractionEnable = true
+
@objc open fileprivate(set) dynamic var currentIndex: Int = 0
// MARK: - Private properties
@@ -260,6 +268,9 @@ open class FSPagerView: UIView,UICollectionViewDataSource,UICollectionViewDelega
return animationKeys.contains(where: { rotationAnimationKeys.contains($0) })
}
fileprivate var possibleTargetingIndexPath: IndexPath?
+ fileprivate var offsetAtBegin:CGPoint? {
+ didSet { if isMultiScrollInteractionEnable { offsetAtBegin = nil } }
+ }
// MARK: - Overriden functions
@@ -391,6 +402,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.isPossiblyRotating && self.numberOfItems > 0 {
// In case someone is using KVO
let currentIndex = lround(Double(self.scrollOffset)) % self.numberOfItems
@@ -411,6 +430,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) {
@@ -422,12 +442,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) {