UICollectTionView加UIViewController對外組合模塊

功能是左右滑。

三大關(guān)鍵對外值:

1.progress (進(jìn)度)其實就是一個比例值 。 (吐槽一下,貌似比較難的布局都喜歡或者說都會用到比例這種方式)

2.sourceIndex(原index)

3.targetIndex (目標(biāo)index)


步驟一:

判斷左右滑動

偏移量與舊的偏移量進(jìn)行對比:

if(變大){
則是左滑
}else if(變小){
則是右滑
}

// 2.判斷是左滑還是右滑
        let currentOffsetX = scrollView.contentOffset.x
        let scrollViewW = scrollView.bounds.width
        if currentOffsetX > startOffsetX { // 左滑
            // 1.計算progress
            progress = currentOffsetX / scrollViewW - floor(currentOffsetX / scrollViewW)
            
            // 2.計算sourceIndex
            sourceIndex = Int(currentOffsetX / scrollViewW)
            
            // 3.計算targetIndex
            targetIndex = sourceIndex + 1
            if targetIndex >= childVcs.count {
                targetIndex = childVcs.count - 1
            }
            
            // 4.如果完全劃過去
            if currentOffsetX - startOffsetX == scrollViewW {
                progress = 1
                targetIndex = sourceIndex
            }
        } else { // 右滑
            // 1.計算progress
            progress = 1 - (currentOffsetX / scrollViewW - floor(currentOffsetX / scrollViewW))
            
            // 2.計算targetIndex
            targetIndex = Int(currentOffsetX / scrollViewW)
            
            // 3.計算sourceIndex
            sourceIndex = targetIndex + 1
            if sourceIndex >= childVcs.count {
                sourceIndex = childVcs.count - 1
            }
        }
        // 3.將progress/sourceIndex/targetIndex傳遞給titleView
        delegate?.pageContentView(self, progress: progress, sourceIndex: sourceIndex, targetIndex: targetIndex)```
點評:
> progress = currentOffsetX / scrollViewW - floor(currentOffsetX / scrollViewW)

1.利用floor函數(shù)取整,比較方便

2.
>progress = 1 - (currentOffsetX / scrollViewW - floor(currentOffsetX / scrollViewW))

1減就實現(xiàn)了從左變右滑了

3.防越界
超就減1,當(dāng)回退了,好思路

4.
            if currentOffsetX - startOffsetX == scrollViewW {
                progress = 1
                targetIndex = sourceIndex
            }

    完全劃過去在這種處理方式里算是比較特殊的情況了


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

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

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