Swift: UICollectionView實(shí)現(xiàn)分頁(yè)注意點(diǎn)

scrollViewWillEndDragging

scrollViewWillEndDragging:方法實(shí)現(xiàn)分頁(yè),此效果要求左右頁(yè)在手機(jī)屏幕上都要顯示一部分,如下圖所示:

示例

代碼如下:

/// 分頁(yè)效果 手拖拽才調(diào)用
    func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        
        // 滑動(dòng)距離太短時(shí),沒(méi)有動(dòng)畫(huà)效果,解決方法
        targetContentOffset.pointee = scrollView.contentOffset
        var targetXContentOffset = CGFloat(targetContentOffset.pointee.x)
        
        /// 滾動(dòng)小部分也翻頁(yè) true向左滾動(dòng)
        if self.leftScroll == true { // 左
            targetXContentOffset += itemWidth * 0.5
        }else{
            targetXContentOffset -= itemWidth * 0.5
        }
        // I use this way calculate newPage:
        var newPage = roundf(Float(targetXContentOffset / itemWidth))
        if newPage == -1 {
            newPage = 0
        }else if(Int(newPage) > self.selfExaminArr!.count - 1){
            newPage = Float(self.selfExaminArr!.count - 1)
        }
        var targetOffsetX: CGFloat = 0.0
        if newPage == 0 {
            // 第0頁(yè)的偏移量
            targetOffsetX = -15
        }else if newPage == 1{
            // 第1頁(yè)的偏移量
            targetOffsetX = itemWidth - 10
        }else{
            // 其他頁(yè) = 第1頁(yè)的偏移量 + 除去第1頁(yè)的偏移量
            targetOffsetX = (itemWidth - 10) + CGFloat(newPage-1) * (itemWidth + 5.0)   // itemWidth-10+15 間距
        }
        let newPosition = CGPoint (x:  targetOffsetX, y: targetContentOffset.pointee.y)
        // 動(dòng)畫(huà)間隔一下避免沖突
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.005) {
            scrollView.setContentOffset(newPosition, animated: true)
        }
        
    }

當(dāng)手指點(diǎn)擊cell時(shí)候,偏移量會(huì)歸位(向左),最后查到是因?yàn)榇蜷_(kāi)了分頁(yè)功能collectionView.isPagingEnabled = true, 設(shè)置為false即可

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容