美文网首页
CollectionView pageEnable 实现

CollectionView pageEnable 实现

作者: feb961880dc1 | 来源:发表于2019-08-26 02:57 被阅读0次

参考文章的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
    }
}

相关文章

网友评论

      本文标题:CollectionView pageEnable 实现

      本文链接:https://www.haomeiwen.com/subject/rkylectx.html