本是想研究下UICollectionView的横向滑动,然而仔细想想要不就索性做一个轮播器吧。
首先看看成果:
丑是丑了点但接触到的知识点还是不少的.接下来讲解下主要思路和关键代码。
1.首先必然是要写出UICollectionView横向滑动的效果。因为是横向滑动所以UICollectionViewFlowLayout的scrollDirection自能设置为UICollectionViewScrollDirectionHorizontal。
1 | layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; |
2.就是设置Layout的minimumLineSpacing属性。如果设置的minimumLineSpacing的值大于0时,在之后设置循环显示时一定要把该值考虑进去,不然是很容易出现循环显示错误。
3.UICollectionView横向滑动设置好后可以通过NSTimer来实现自动轮播。
- 设置定时器
1 | NSTimer *timer = [NSTimer timerWithTimeInterval:self.automaticallyScrollDuration target:self selector:@selector(showNext) userInfo:nil repeats:true]; |
self.automaticallyScrollDuration 为循环时间
- 实现轮播代码
1 | //自动显示下一个 |
- 实现UIScrollViewDelegate代理方法
1 | //手动拖拽结束 |
4.实现循环轮播需要改变数据源来实现。
- 分别设置两个属性
1 | @property (nonatomic, copy) NSArray *dataArray; // 图片数据 |
dataArray存储要显示的图片数组 mutableImageArray是用来实现循环轮播的图片数组
1 |
|
🌰 dataArray = 12345 那么mutableImageArray = 5123451 为什么要获取这样的数组呢?我的理解是当轮播到最后一张图片(mutableImageArray最后一位的1)时,直接显示mutableImageArray的第二位的1.(即通过设置ScrollView的ContentOffset来显示)
5.在4中还要个问题就是默认值
1 | [_collectionView setContentOffset:CGPointMake(_collectionView.bounds.size.width, 0)]; |
6.UIPageControl的设置在实现循环轮播中就应该考虑进去
详细代码见DEMO
有错误和不足不吝赐教!!!!!!