scrollview自定義分頁大小
- (CGPoint)nearestTargetOffsetForOffset:(CGPoint)offset withVelocity:(CGPoint)velocity
{
//滑動檢視在最左側的時候再往最左側滑或者在最右側的時候再往最右側滑的時候就不用計算了
if (self.adCollectionView.contentOffset.x < 0 || self.adCollectionView.contentOffset.x + self.adCollectionView.width > self.adCollectionView.contentSize.width) {
return
}
CGFloat pageSize = self.cellWidth + self.padding;
CGFloat targetX;
CGFloat currentCenterX = [self _getCurrentCenterXWithPageSize:pageSize];
//10pt的設定是為了讓滑動檢視只要有一點滑動動作,就讓他滾到下一個頁面,使用系統自己的滾動判定在手動滑動的距離較短時會導致檢視抖動
//帶速度的時候(也就是輕掃)才讓他滑到下一頁
if (offset.x - currentCenterX >= 10.f && velocity.x
_curPage++;
} else if (offset.x - currentCenterX < -10.f && velocity.x < 0) {
_curPage--;
} else if (offset.x - currentCenterX >= pageSize / 2.f && velocity.x == 0) {
_curPage++;
} else if (offset.x - currentCenterX < -pageSize / 2.f && velocity.x
_curPage--;
}
targetX = [self_getCurrentCenterXWithPageSize:pageSize];
[self.pageControlsetCurIndex:_curPage];
return CGPointMake(targetX, offset.y);
}
- (CGFloat)_getCurrentCenterXWithPageSize:(CGFloat)pageSize
{
return pageSize * _curPage - ((self.adCollectionView.width - self.cellWidth) / 2.f); //實際上每次滑動的分頁的大小並不一定是item的大小,為了使停止的時候item居中,需要減掉多餘部分的x,16是左邊的inset(說白了就是滑的多了,要減掉補償一下)
}