iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器

     新的一周开始了,今天这篇笔记,是记录我最近学到的用UICollectionView实现了无限图片轮播器的方法。我们可以看到,现在市面上,很多iOS app都会用到图片轮播的技术,实现出来的效果也是非常不错,值得记录下来跟大家分享交流。

     作为一个iOS开发者,我们要做一个iOS app,主要就是搞定两个方面:对接数据、搭建界面。数据包含网络数据和模型,通过搭建UI界面,把数据展现出来,实现效果。由于,这是我自己做的一个简易的图片轮播器,所以准备的数据都是本地图片,如下所示:

iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第1张图片
01.jpg
iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第2张图片
02.jpg
iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第3张图片
03.jpg

      随意的找了3张图片,分别命名为01、02、03。图片准备好了,接下来开始搭建界面,如下代码所示:创建一个新的demo,把3张图片放到image文件夹中,创建一个继承于UICollectionView 的 HomeLoopView。

iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第4张图片
创建一个继承于UICollectionView的HomeLoopView

首先,在控制器中,加载本地图片数据,如下代码所示:

iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第5张图片
通过for循环加载本地图片数据,保存在数组中

打印结果如下:

成功加载保存到数组中

      紧接着,我们要把图片数据对接到CollectionView上面去展示出来,那么我们就要在HomeLoopView创建一个init方法,来对接数据,如下代码所示:

iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第6张图片
创建一个initWithUrl方法

      我们把HomeLoopView添加到ViewController上面,让它成为控制器的子视图,如下代码所示:

iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第7张图片

     紧接着,我们创建一个HomeLoopViewFlowlayout,继承于UICollectionViewFlowLayout,实现一个CollectionView的效果,如下代码所示:

iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第8张图片

      然后,我们自定义一个UICollectionViewCell,取名为HomeLoopViewCell,由于数组中存的是二进制图像,所以,我们需要将二进制图像转化为图像,如下代码所示:

iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第9张图片
collectionviewCell的frame是根据之前的layout已经确定好的!

      紧接着,我们在LoopView中引用Layout和Cell的头文件名,同时注册一个cellID,让LoopView遵守CollectionView的数据源方法和代理方法。

iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第10张图片
让HomeLoopView独立的处理轮播器相关的所有代码逻辑

ok,我们接下来来实现无限轮播效果。遵守代理和数据源方法,注册cell。


iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第11张图片
默认位置为第二组的第一张图片,安排任务在主线程上面执行

我们假设numberOfItemsInSection 有2组:

iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第12张图片
一组有3张图片,现在有2组,程序运行时,默认位置为第二组的第一张照片。
iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第13张图片
iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第14张图片
取模是为了防止数组越界

     以上的代码写完之后,运行程序,可以实现滚到第一组的第一张图片,和第二组的最后一张图片,还没有达到我们无限的轮播的效果,所以,我们必须要通过代理方法,监听图片的偏移量,如果偏移量为0,就让它的偏移量为_imgUrls.count,否则就为_imgUrls.count-1,如下所示:

iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第15张图片
iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第16张图片

最终实现的效果:

补充:现在有一些图片轮播器,左右滚动图片的时候,滚着滚着就会出现卡顿现象,这样的用户体验不太好,不妨可以试试,扩大数据源的数据,果断搞个100组。

iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器_第17张图片

你可能感兴趣的:(iOS开发 • 实例——用UICollectionView实现一个简易的图片无限轮播器)