功能是左右滑。
三大關(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
}
完全劃過去在這種處理方式里算是比較特殊的情況了