UIScrollView自动滚动 循环滚动视图实现

UIScrollView 实现自动滚动 循环播放的视图 

其实大家对这种demo并不少见了,但是我还是想自己去动手封装一个可以在任何项目中拿来就可以使用的,自己写的代码要比粘贴复制的代码更有意义,自己也就理解的更加深刻了。下面简单谈一下实现原理吧,“自动滚动”其实并不难实现了,因为我们可以用个定时器(NSTimer),每隔一个时间段让scrollView自动的滑动到下一个页面,难就难在如何实现“循环”了,也有人觉得循环还不好实现吧,在最后一页上面添加个滑动的手势,滑动最后一页的时候,直接让scrollView滑动到第一页不就行了吗? 但是这样大家想一下,这样的用户体验好吗? 中间连个过度都没有,直接闪出第一页,这样是不行的吧? 那么我们要把程序做的完美一点,就需要在想想还有没有其他方式去实现了,其实有很多方式了,我这里介绍2种,各取所需好了。

首先我们定义我们的数据源 NSArray sourceArr里面有5张图片。分别是img1,img2,img3,img4,img5

第一种,

我们可以在scrollview上添加100组sourceArr的图片,用户不可能那么无聊,真的会把这100组滑动完,哈哈,这是最笨的一种办法,而且如果你的图片比较大,还要做图片缓存,也比较吃内存,我个人不喜欢这种方式。只是觉得好玩儿,想到了就贴出来看一下。

第二种,

这种也是我参考其他人的思想,我们可以在scrollview里面这样添加图片的顺序, img 5,  img1,  img2, img3, img 4 ,img 5 ,img1位置分别是 0,1,2,3,4,5,6    大家想到怎么回事了吧,这样,手指从img 5到img1循环的时候 (也就是位置5到位置6)是有个过度的,一旦滑动到第6个位置,那么我就让scrollview  scrollRectToVisible: 位置1 动画设置为no。相反,如果手指从img1滑动到img5(也就是位置1到位置0)也是有个过度的,一旦滑动到位置0,那么我就可以让scrollview  scrollRectToVisible: 位置5 动画依然设置为no, 就可以了。这样问题就解决了,但是当你滑动速度,相当快的时候,到最后一页还是会出现一点小小的瑕疵,这是因为你从位置5滑动到位置6的时候,位置5后面已经没有图片了,这时候还scrollview  scrollRectToVisible: 位置1 还没有执行,而你手指依然继续往后滑动了,就会出现空白的区域,也就是scrollview到了边界了,不仔细看还真看不出来


下面我把截图和代码分享给大家,target是iOS 7, 我没改target版本 也没有手动管理内存。 我使用的第2种方式写的demo,下面的图片是最后一张切换到第一张的过度效果,具体的demo下载地址 

自动循环滚动的UIScrollView

UIScrollView自动滚动 循环滚动视图实现_第1张图片

你可能感兴趣的:(iOS,技术篇)