ps:文中imageView与image是划分得非常清楚的,image有时也用图片
表示
- 图片无限循环的文章网上已经有一大堆,但是我还是希望自己能写一个非常详细的解读文章出来
- 我会先一步一步文字加图片描述实现的原理,最后再上代码
- 在无限循环中我只使用3张ImageView,在不断的滑动过程中,我不会去移动ImageView的位置,我要做的只有两件事:
- 每次滑动后,重新计算好imageView新的image,然后设置给imageView
紧接着重新设置scrollView的contentoffsize
接下来我会图解上面所说的两个步骤:
- 先假设我有5张广告图片,由于宽度问题,我只显示三张,图片中的数字代表第几张图片,看清楚,是
图片
不是imageView! - 一开始,把contentoffset设置到中间的那张imageView上,也就是显示中间的imageView,并且以后每次滚动完都会进行这样的设置,这里先记住
- 图中显示的是第0张图片,所以向左滑动显示的肯定是最后一张图片,也就是第4张,同理,右滑是第1张
- 所以,三张imageView分别放置第4,第0,第1张图片,是非常正常的
- 接下来,我们向右滑动:
- 大家注意看了,因为我们只设置了三张图片,那么经过我们向右滑动,屏幕应该显示的应该是第1张,而左边的imageView放置的应该是第0张图片,右边的imageView放置的则是第2张图片,这是理所当然的
- 这时,大家肯定会有疑问,我们刚刚不是右滑了么,屏幕应该停留在第三张imageView上,并且右边已经没有imageView了,scrollView已经滑动到头了,而左边两张imageView依然放置的是第4张和第0张图片啊,你现在是神马情况?
- 大家的疑问是非常正确的,那么我想请大家想一下,如果我在向右滑动这个用户操作结束后,我马上替换这三张imageView的image,让三张imageView分别显示第0,第1,第2张图片,并且,马上设置scrollView的contentoffset于中间的那张imageView上,看清楚哈,是马上!
- 经过上面那一小段的操作,现在我们的scrollView不就是这样一个状态了么:
- 这时候,有个关键点我必须详细说明一下,在上述步骤操作中,我的确是先把每个imageView应该显示的图片设置完毕后,再来设置contentoffset回归于中间
- 也就是说,按照正常逻辑,屏幕曾有那么一段时间显示的应该是第3个imageView上的第2张图片,然后再经过强制设置contentoffset,再次显示第2张imageView的图片
- 我曾经也有过这样的疑问,但是大家想想看,代码运行一行的需要的时间是多少?当前一行代码刚把界面的图片给换了,后一行代码就马上把contentoffset给重置了,你觉得我们能够看到刚替换的图片么?
- 所以说,无限循环就是一个赤果果的障眼法!
代码解释
- 我先分段代码解释,再在最后上完整的代码
- 整个无限循环功能其实重点只在接下来的三个方法里
|
|
- 我已经将无限循环的灵魂思想与代码结合在一起,在上面的代码中详细叙述了,其他的就不过多解释了,解释多了反而会造成反效果,接下来是这个无限循环的整体代码,欢迎拿来使用
完整代码
使用
|
|
loopPageView.h
|
|
loopPageView.m
|
|