轮播图一般使用scrollView实现,好一点的话就设置三张图片,重用。
这里我另辟蹊径使用collectionView,让系统帮我们重用imageView。(系统只创建了两个cell!!!)
创建collectionView之类不再赘述。
imageArray 存放图片,isDragging 判断当前是否正在拖拽。
刷新数组时,把图片数组传过来。 假如有三张图片 也就是123 三张,这里把最后一个对象再添加到数组最前边,第一张图像添加到最后面,也就变成了31231,这里跟常规轮播图思路大致一致。
collectionView reloadData后,立刻向右偏移一个图片的宽度,也就是本来显示3这张图片,偏移到1图片。
然后开启timer。
在collectionView的代理方法didEndDisplayingCell方法中,判断当前滚动到第几个,如果滚动到第0个或者imageArray.count-1个cell的话,就立刻重新设置collectionView的contextOffSet。要注意的是imageArray是后来增加过对象的array,而不是传过来的。代码如下
下面是timer的方法
其中isDragging在scrollview的代理方法 beginDragging和didEndDragging中改变。为了更好的用户体验,在endDragging中,延迟执行了更改isDragging(为防止拖拽后,timer方法立刻执行)。
使用后发现轮播图页面,push后,timer会一直走,但是collectionView的didEndDisplayingCell方法不会再调用。所以添加了startTimer和endTimer两个方法。如下图
startTimer在viewWillAppear方法里边调用,endTimer在viewWillDisAppear方法里调用。
最后附上gitHub链接 gitHub链接
网友评论