前言
ios实现无限循环滚动主要有两种办法,都利用了UIScrollView,第一种是创建一个很大的UIScrollView((n+2)*屏幕宽度),把要展示的图片都添加到这个视图上,通过对偏移值的更改达到循环的效果;第二种是创建一个三倍屏幕大小的UIScrollView,只使用三张图片,通过不断更新图片来达到循环的效果。
这两天把这两种方法都写了一次,今天只讲第一种。
附:第二种方法
ios之实现自动无限循环滚动视图(2)
效果展示
功能
- 实现用户左右滑动时可以无限循环滚动
- 实现图片的自动轮播
- 用户开始滑动时,自动轮播停止,用户无操作两秒后继续开始自动轮播
分析
本来一开始只打算写左右滑动时的无限滚动的(也没打算加pageControl),但是写着写着就把自动轮播也给写完了。按照我的思路分成四个部分来讲。
-
用户左右滑动时的无限循环滚动
原理:要实现左右滑动就是利用UIScrollView的特性,创建一个UIScrollView视图,将视图的可见宽度设为与屏幕同宽,并将视图设置为可分页,图片就可以一页页展示出来。那么该如何实现循环滚动呢?
当我们需要展示n张图片时,视图的实际宽度要设置为(n+2)*屏幕宽度,因为需要在额外在最前一页放上第一张图片,最后一页放上第一张图片(如图所示)
如图,当显示到要展示的图片4,并且要继续向右滑动时,逻辑上来说我们需要回到要展示的图片1,才能继续循环。但为了实现“向右滑动”的效果,需要额外在最后一页放上一张图片1,展示出向右滑的动画,再偷偷将UIScrollView的偏移量调整到要展示的图片1位置(不显示动画),营造出一种“一直在向右滑”的假象。
代码如下:
//当scrollView停止滚动之后调用此方法 -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ //计算偏移量所对应的页数 int page = scrollView.contentOffset.x/KScreenWidth; //NSLog(@"%d",page); if (page == 0) { //此时应滚到最后一页 //重新设置偏移量 scrollView.contentOffset = CGPointMake(KScreenWidth*4, 0); //可以用这句代替上一句重新设置偏移量 //可以将animated改成YES体验一下效果 //[scrollView