91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS中無限循環滾動簡單處理實現原理分析

發布時間:2020-09-12 15:17:36 來源:腳本之家 閱讀:268 作者:Little_Dad 欄目:移動開發

說下原理:

1./*初始化/

+ (instancetype)loopScrollViewWithFrame:(CGRect)frame;

將背景collectinview視圖初始化設置 代理和數據源 、 布局

2.在激活initwithFrame后觸發 layoutSubviews

 //默認滾動到要顯示的第一張圖片
 if (self.imageCollectionView.contentOffset.x == 0) {
  NSIndexPath *indexPath = [NSIndexPath indexPathForItem:1 inSection:0];
  [self scrollToIndexPath:indexPath animated:NO];
  self.currentIndex = 1;
}

界面展示出來的時候默認 顯示 真實下標也就是從1開始

設置真實數據源 imageList ,然后展示 的 數據源是loopImageList 這里 呢 多出2個對象,0和末尾,設置時 最后 和 起始,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后的整數
 NSInteger index = scrollView.contentOffset.x/width;
 //這個比值很重要
 CGFloat ratio = scrollView.contentOffset.x/width;
 //從顯示的最后一張往后滾,自動跳轉到顯示的第一張
 if (index == self.loopImageList.count-1) {
  self.currentIndex = 1;
  NSIndexPath *indexPath = [NSIndexPath indexPathForItem:self.currentIndex inSection:0];
  [self scrollToIndexPath:indexPath animated:NO];
  return;
 }
 //從顯示的第一張往前滾,自動跳轉到顯示的最后一張
 //這里判斷條件為contentOffset.x和寬的比值,在往前滾快要結束的時候,能達到無縫切換到顯示的最后一張的效果
 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);
}

這里的原因是為什么呢?

這時候在圖滾動 執行代理 監聽的時候 ,我們的collectionview有設置 pageEnable 分頁屬性很關鍵有分頁動畫。

當偏移量判斷 真實的數據顯示到了最后一張。也就是8 滾到1的時候 ,設置回滾 ,回到默認位置,且沒有動畫。

另外一步處理當偏移量 小于 一個極小值 也就是 偏移即將到達 0 的是偶也就是 真實的第一張回滾到最后 一張的時候,設置默認滾動到最后一張。

最重要的一點 這個黑科技 是使用scro 滾動到特定的item所以 在觸發的那一時刻,item就設定死了,scrollViewDidScroll:也就不會再滾動,因為現在的偏移量是一個唯一值。

總結

以上所述是小編給大家介紹的iOS中無限循環滾動簡單處理實現原理分析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

当涂县| 上犹县| 湖州市| 宾川县| 贵州省| 罗甸县| 竹山县| 沧源| 平罗县| 雅江县| 遂平县| 通化县| 宁强县| 兴化市| 维西| 肥西县| 申扎县| 灵石县| 溧水县| 封丘县| 梓潼县| 班戈县| 金沙县| 绿春县| 东方市| 盐津县| 麻栗坡县| 巴东县| 朝阳县| 吉林市| 延庆县| 游戏| 城口县| 湘阴县| 克什克腾旗| 班玛县| 三原县| 贵溪市| 敖汉旗| 肇庆市| 沿河|