前言
ios实现无限循环滚动的两种方法,昨天已经讲了第一种,第一种方法的弊端是,假如要展示很多张图片(成百上千张),UIScrollView要设置的contentSize值会非常大,同时,假如这些图片都是从网络下载的,要先一次性下载全部的图片明显也不合理。因此一般采用第二种方法,只用三个图片视图用于展示,每次滑动结束后再获取新的图片数据,然后重新展示到视图上。
附:昨天写的第一种方法
ios之实现自动无限循环滚动视图(1)
效果展示
功能
- 实现用户左右滑动时的无限循环滚动
- 实现图片的自动轮播
- 用户开始滑动时,自动轮播停止,用户无操作两秒后继续开始轮播
分析
其他部分和昨天的差不多,主要是在实现无限循环滚动时有区别。下面讲解一下原理。
UIScrollView的真实范围只有三个屏幕宽度,分成三个图片视图,每次滑动结束时,都要重新设置三个视图的图片(setImage)。设有一个图片数组imagesArray,每次只需要三张图片,即要展示的图片(i)、它前一张图片(i-1)、它后一张图片(i+1);当要展示的图片是第一张图片时,它前一张图片就是图片数组的最后一张图片imagesArray[lastObject];当要展示的图片是最后一张图片时,它后一张图片就是图片数组的第一张图片imagesArray[firstObject]。
因此需要一个变量来保存当前所展示的图片是第几张,并且实现一个方法,输入要展示的图片序号即可返回包含其左右图片的数组
方法的代码
//根据传来的值返回其左右的图像
-(NSMutableArray *)getImgToShowByIndex:(int )index{
NSMutableArray *imgArray = [NSMutableArray array];
if(index == 0){
//第一张 4 0 1
[imgArray addObject:[_imagesArray objectAtIndex:4]];
[imgArray addObject:[_imagesArray objectAtIndex:index]];
[imgArray addObject:[_imagesArray objectAtIndex:index +1]];
}else if(index == 4){
//最后一张 3 4 0
[imgArray addObject:[_imagesArray objectAtIndex:index - 1]];
[imgArray addObject:[_imagesArray objectAtIndex:index]];
[imgArray addObject:[_imagesArray objectAtIndex:0]];
}else{
[imgArray addObject:[_imagesArray objectAtIndex:index -1]];
[imgArray addObject:[_