参考文章的collectionView pageEnable 实现
https://www.jianshu.com/p/68614a137751
简单改了一下
class TestLayout: UICollectionViewFlowLayout {
var stepSpace:CGFloat {
return self.itemSize.width + self.minimumLineSpacing
}
var lastPosition:CGPoint = .zero
override func prepare() {
super.prepare()
self.collectionView?.decelerationRate = .fast
}
override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {
let move = CGFloat(abs(Int32(self.lastPosition.x - proposedContentOffset.x)))
let factor = move / self.stepSpace > 1
let trigger = !(-0.3...0.3).contains(Double(velocity.x))
var offset = proposedContentOffset
switch velocity.x {
// 左滑
case let x where x > 0 && trigger && !factor:
offset.x = stepSpace * CGFloat(ceil(Double(proposedContentOffset.x / stepSpace)))
case let x where x > 0 && trigger && factor:
offset.x = lastPosition.x + stepSpace
// 右滑
case let x where x < 0 && trigger && !factor:
offset.x = stepSpace * CGFloat(floor(Double(proposedContentOffset.x / stepSpace)))
case let x where x < 0 && trigger && factor:
offset.x = lastPosition.x - stepSpace
default:
offset = lastPosition
break
}
lastPosition = offset
return offset
}
}
网友评论