先上效果圖:
正文:實現(xiàn)思想
如上圖所示艾杏,當(dāng)處于圖1狀態(tài)時,ok盅藻,不用考慮太多购桑。
1.當(dāng)處于圖2狀態(tài)時,需要在0元素
前補上new元素2
2.當(dāng)處于圖3狀態(tài)時氏淑,需要在2元素
之后補上元素0
3.當(dāng)圖2狀態(tài)元素補上之后勃蜘,繼續(xù)左滑到new元素2
時,將控件的偏移量改為元素2
4.當(dāng)圖3狀態(tài)元素補上之后夸政,繼續(xù)右滑到new元素0
時元旬,將控件的偏移量改為元素0
1.構(gòu)造新的數(shù)據(jù)源數(shù)組
這里可以重新構(gòu)造一個新的數(shù)據(jù)源數(shù)組,也就是說將原數(shù)組
?@[@"0",@"1",@"2"]
重新構(gòu)造為
?@[@"2",@"0",@"1",@"2",@"0"]
如下圖:
2.修改偏移量
????核心方法為- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView; // called when scroll view grinds to a halt
????在該方法中計算當(dāng)前是第幾個元素,如果處于示意圖.png
的圖2 和 圖 3狀態(tài)時匀归,默默的將其偏移量修改一下坑资。
????修改偏移量可以使用- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated; // animate at constant velocity to new offset
方法,注意將animated
設(shè)置為NO
穆端。
3.添加timer
????添加timer實現(xiàn)自動輪播功能袱贮,timer的添加需要注意用戶手動滾動時對collectionView的影響,需要注意兩個方法:
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
[self cancleTime];
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
[self addTimer];
}
????即在方法- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
中取消timer体啰,在方法- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
中重新添加timer攒巍。
至此即實現(xiàn)了使用collectionView自動無限輪播的功能
向上滾動的跑馬燈實現(xiàn)和以上思想類似,只需要改一下collectionView的布局即可荒勇,具體可以查看demo柒莉。
附上簡單的demo地址:戳我
取巧方式實現(xiàn)collectionView自動無限輪播的功能
- collectionView的數(shù)據(jù)源方法
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;
,返回999沽翔。- 這樣有999個一樣的分區(qū)兢孝,也可以一定程度上實現(xiàn)輪播的功能,用戶也不會咸蛋的看到第999個分區(qū)仅偎。
????取巧方式并不能完全實現(xiàn)左右邊界元素的無限循環(huán)滾動跨蟹,但在于比較簡單,如果產(chǎn)品無強制要求也是可以使用這種方式來快速擼功能的橘沥。