CollectionView pageEnable 实现

2019-08-26  本文已影响0人  feb961880dc1

参考文章的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
    }
}
上一篇 下一篇

猜你喜欢

热点阅读