系统自带的PagingEnabled会把scrollView/collectionView的contentSize平均分割成几部分,每页滑动的距离不能自己控制,如下面的演示图片,每页滑动的距离是 cell.width + itemSpacing + 下一个cell的一小部分,这里将介绍如何自定义每页滑动的距离:
⚠️不要将系统的pagingEnabled设置为YES
主要代码:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
CGFloat destinationX = targetContentOffset->x;
CGFloat pageWidth = self.itemWidth + 20;
CGFloat movedX = destinationX - pageWidth * self.selectedIndex;
if (movedX < -pageWidth * 0.5) {
// Move left
self.selectedIndex--;
} else if (movedX > pageWidth * 0.5) {
// Move right
self.selectedIndex++;
}
if (ABS(velocity.x) >= 2){
targetContentOffset->x = pageWidth * self.selectedIndex;
} else {
targetContentOffset->x = scrollView.contentOffset.x;
[scrollView setContentOffset:CGPointMake(pageWidth * self.selectedIndex, scrollView.contentOffset.y) animated:YES];
}
}