一个广告轮播视图的实现

时间:2021-09-01 20:18:05

前言

在很多项目中都有轮播广告的需求,但水平比较低的菜鸟开发一个好用的广告轮播视图可能并不简单(当然,我也还是一只小菜鸟),这里把我的实现方式和大家分享一下,有什么好的建议或者知道有好的开源项目欢迎留言。

 

思路:

一、选择滚动视图

1、用UIScrollerVeiw实现:在UIScrollerView上平铺UIImageView,打开分页。这样可以实现,但是要重用UIImageView比较麻烦,若不实现重用机制,当图片数量过多时,可能造成内存不足而崩溃。

2、通过UITableView实现:UITableView很容易解决上述的重用问题,但是UITableView是竖直方向滚动的,而一般来说广告轮播需要在水平方向滚动,要实现水平方向的滚动,就必须能通过一系列的旋转。

3、通过UICollectionView实现:UICollectionView既能在水平方向滚动,又能在竖直方向滚动,还能工重用cell,因此,UICollectionView很容易解决上述问题。

 

二、实现循环滚动

要实现循环播放,就必须在滚动到最后一张图片后还能继续向后滚动到第一张图片,滚动到第一张图片后还能继续向前滚动到最后一张图片。如何解决这个需求?

1、使得显示的图片数量 = 实际需要显示的图片数量 + 2,在最后一张图片的后面继续放第一张图片,在第一张图片的前面放上最后一张图片,图片排列如:(5:1:2:3:4:5:1)。当滚动到最后一张图片时(实际看到第一张图片:1),静默的滚动到第二张图片(看到的还是第一张:1)。当滚动到最前一张图片是(实际看到最后一张:5),静默滚动到倒数第二张(时间看到的还是最后一张:5)。这样基本能够满足要求,但是处理逻辑比较复杂(很多+1、-1的逻辑),很容易出错,并且,当快速滚动时,静默滚动经常不能触发,使得无法循环滚动。

2、使得显示的图片数量 = 实际需要显示的图片数量 x N(一个整数),图片显示为:((12345)(12345)(12345)......)N组,大部分时间里,看到的都是较靠中间的一组,当当前显示的图片不是中间一组的图片时,静默的将图片滚动到中间一组。这样在用UITableView或者UICollecitonView实现过程中逻辑比较简单(因为UITableView和UIConllecitonView有分组的概念,我们可以设置UITableView和UIConllecitonView的组数为N),也基本能从表象上解决快速滚动的过程中,静默滚动不能触发导致不能循环滚动的问题(因为现实图片的数量较多,用户一般不会一直快速滚动这么多张),不必担心乘以N后,图片的数量变多而引起的内存问题,UITableView和UIConllecitonView的重用机制已经帮我们解决了这一问题。

 

总结

这篇文章就写到这里,有什么好的建议欢迎留言或者发邮件:770322699@qq.com

代码已经上传到github:https://github.com/a770322699/YQAdvCircleView

支持cocoaPods