說下原理:
10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有鞏義免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
1./*初始化/
+ (instancetype)loopScrollViewWithFrame:(CGRect)frame;
將背景collectinview視圖初始化設(shè)置 代理和數(shù)據(jù)源 、 布局
2.在激活initwithFrame后觸發(fā) layoutSubviews
//默認滾動到要顯示的第一張圖片 if (self.imageCollectionView.contentOffset.x == 0) { NSIndexPath *indexPath = [NSIndexPath indexPathForItem:1 inSection:0]; [self scrollToIndexPath:indexPath animated:NO]; self.currentIndex = 1; }
界面展示出來的時候默認 顯示 真實下標也就是從1開始
設(shè)置真實數(shù)據(jù)源 imageList ,然后展示 的 數(shù)據(jù)源是loopImageList 這里 呢 多出2個對象,0和末尾,設(shè)置時 最后 和 起始,setImageList如下
- (void)setImageList:(NSMutableArray *)imageList { _imageList = imageList; self.loopImageList = [NSMutableArray arrayWithArray:imageList]; if (imageList.count>0) { [self.loopImageList insertObject:[imageList lastObject] atIndex:0]; [self.loopImageList addObject:[imageList objectAtIndex:0]]; } }
核心代碼和思路
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat width = self.bounds.size.width; //在loopImageList中,有n+2個對象,因此index取offset.x/width后的整數(shù) NSInteger index = scrollView.contentOffset.x/width; //這個比值很重要 CGFloat ratio = scrollView.contentOffset.x/width; //從顯示的最后一張往后滾,自動跳轉(zhuǎn)到顯示的第一張 if (index == self.loopImageList.count-1) { self.currentIndex = 1; NSIndexPath *indexPath = [NSIndexPath indexPathForItem:self.currentIndex inSection:0]; [self scrollToIndexPath:indexPath animated:NO]; return; } //從顯示的第一張往前滾,自動跳轉(zhuǎn)到顯示的最后一張 //這里判斷條件為contentOffset.x和寬的比值,在往前滾快要結(jié)束的時候,能達到無縫切換到顯示的最后一張的效果 if (ratio <= 0.01) { self.currentIndex = self.imageList.count; NSIndexPath *indexPath = [NSIndexPath indexPathForItem:self.currentIndex inSection:0]; [self scrollToIndexPath:indexPath animated:NO]; return; } if (self.currentIndex != index) { self.currentIndex = index; } NSLog(@"currentIndex = %ld",self.currentIndex); }
這里的原因是為什么呢?
這時候在圖滾動 執(zhí)行代理 監(jiān)聽的時候 ,我們的collectionview有設(shè)置 pageEnable 分頁屬性很關(guān)鍵有分頁動畫。
當偏移量判斷 真實的數(shù)據(jù)顯示到了最后一張。也就是8 滾到1的時候 ,設(shè)置回滾 ,回到默認位置,且沒有動畫。
另外一步處理當偏移量 小于 一個極小值 也就是 偏移即將到達 0 的是偶也就是 真實的第一張回滾到最后 一張的時候,設(shè)置默認滾動到最后一張。
最重要的一點 這個黑科技 是使用scro 滾動到特定的item所以 在觸發(fā)的那一時刻,item就設(shè)定死了,scrollViewDidScroll:也就不會再滾動,因為現(xiàn)在的偏移量是一個唯一值。
總結(jié)
以上所述是小編給大家介紹的iOS中無限循環(huán)滾動簡單處理實現(xiàn)原理分析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!