无限的UICollectionView

斯威夫特4,Xcode 9

如果您需要创建一个可以从一开始无限向左或向右滚动的收藏夹视图,那么这里就是正确的地方!

我为模型使用了简单的颜色阵列

 懒惰的var colorList:[UIColor] = { 
var colors = [UIColor]()
步调为(从0到1.0:0.25){
设color = UIColor(hue:CGFloat(hue),
饱和度:1
亮度:1
阿尔法:1)
colors.append(颜色)
}
返回颜色
}()

现在,让我们遵循那些collectionview协议。 注意,colorList只是使用%运算符包装了它的数据

  func collectionView(_ collectionView:UICollectionView,cellForItemAt indexPath:IndexPath)-> UICollectionViewCell { 
let cell = collectionView.dequeueReusableCell(withReuseIdentifier:“ ColorCell”,for:indexPath)
cell.backgroundColor = colorList [indexPath.row%colorList.count]
返回单元
}

numberOfItemsInSection可以通过使用大常量来解决。 用户需要滚动数月才能到达终点

 让infiniteSize = 10000000 
  func collectionView(_ collectionView:UICollectionView,numberOfItemsInSection部分:Int)-> Int { 
返回infiniteSize
}

通常只要初始化collectionview,用户就不能向左滚动,因为它是第一个索引路径。 有一种针对这种情况的快速解决方案。 只需将collectionview移到viewDidAppear的中间索引路径即可。 请记住, cellForRow仅被调用可见单元格,

 覆盖func viewDidAppear(_动画:布尔){ 
让midIndexPath = IndexPath(row:infiniteSize / 2,section:0)
colorCollectionView.scrollToItem(at:midIndexPath,
位于:.centeredHorizo​​ntally,
动画:假)
}

而已! 这是到源代码的GitHub链接。

自动滚动

我还创建了一个chore/autoScroll分支,因此我可以使collectionview在无需用户触摸的情况下自动滚动。 它使gif真正闪闪发光🙂