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即可