前言
最近在做一個旅行類的專案,裡面喲孤兒橫向滑動的選項卡功能,乍一看設計圖,感覺很簡單。橫向滑動,CollectionView的flowLayout有這個設定屬性,分分鐘搞定。後來需求要每次滑動一個選項卡。這就讓我有點棘手了,因為心裡知道這個應該是要自己去計算偏移量的問題了
正題
實現這個功能,主要就是呼叫了一個UIScrollView
的代理方法- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
不說別的了,直接上程式碼
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
float pageWidth = 200 + 10;
float currentOffset = _collectionView.contentOffset.x;
float targetOffset = targetContentOffset->
x;
float newTargetOffset = 0;
if (targetOffset+ 20 >
currentOffset) {
newTargetOffset = ceilf(currentOffset/pageWidth) * pageWidth;
}else{
newTargetOffset = floorf(currentOffset/ pageWidth) * pageWidth;
} if (newTargetOffset <
0) {
newTargetOffset = 0;
}else if (ABS(scrollView.contentSize.width - (newTargetOffset + pageWidth))<
pageWidth){
newTargetOffset = scrollView.contentSize.width - _collectionView.bounds.size.width ;
} newTargetOffset = ceilf(newTargetOffset);
targetContentOffset->
x = currentOffset;
[scrollView setContentOffset:CGPointMake(newTargetOffset, 0) animated:YES];
}複製程式碼
這裡面pageWidth
的值是一個item
的寬度加間距,之後對於滑到最後一個item
的時候不足一個item
的寬度做了相應的處理。
如果你們的設計是兩邊都有留白的情況,你可以設定flowLayout.sectionInset
,相應的collectionView
的contentInset
屬性也要做相應的處理
OS:
大神們有什麼好的建議多給我提出來