iOS如何实现UIScrollView的无限轮播功能

  介绍

这篇文章主要介绍iOS如何实现UIScrollView的无限轮播功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强> UIScrollView控件是什么?

(1)移动设备的屏幕?大?小是极其有限的,因此直接展?示在?用户眼前的内容也相当有限

(2)当展?示的内容较多,超出?一个屏幕时,?用户可通过滚动?手势来查看屏幕以外的内容

(3)普通的UIView不具备滚动功能,不能显?示过多的内容

(4) UIScrollView是一个能够滚动的视图控件,可以?用来展?示?大量的内容,并且可以通过滚动查看所有的内容

,(5)举例:手机上的“设置”,其他吗?示例程序

而说到UIScrollView,大家最先想到的肯定就是它上面的无限轮播功能。苹果在UIScrollView上并没有提供相应的方法让大家实现轮播,所以就需要通过代码进行处理来实现。

<强>先上图

 iOS如何实现UIScrollView的无限轮播功能“> <br/>无限轮播效果图。gif <br/> </p> <p> <强>我先给大家讲讲其实现的原理:</强> <br/> </p> <p>我们假设用几张图片实现轮播效果。首先,我们需要打开UIScrollView的分页滑动</p> <pre类=///,分页滑动   时间=_scrollView.scrollEnabled 是的,

它方便的帮助我们实现了轮播的效果,然后就需要我们来实现“无限的“轮播。接下来,我们就需要摆放图片了,在摆放图片时需要注意,我们需要在第一张图片的位置摆放最后一张图片(可能有点懵哈,不过不要着急慢慢往下看),然后我们依次摆放图片(从第一张到最后一张),最后在所有图片的尾部我们再放上第一张图片。这样我们就多放了两张图片(分别在首尾多放了一张图)。我把对应的方法写一下:

///,将图片放置在UIScrollView上   - (void) setupImage  {   ,///在UIScrollView的最前面添加一张图片   ,UIImageView  * firstImageView =, [[UIImageView  alloc], initWithFrame: CGRectMake (0, 0, kScreenWidth,, self.scrollView.frame.size.height)];   ,///图片名是最后一张图片=,firstImageView.image  [UIImage  imageNamed self.imageNameList.lastObject):;   ,[self.scrollView  addSubview firstImageView):;   ,   ,///添加图片   ,for  (NSInteger  index =, 0;, index  & lt;, self.imageNameList.count;, index  + +), {   ,///UIScrollView上的每一张图片   ,UIImageView  * imageView =, [[UIImageView  alloc], initWithFrame: CGRectMake((时间+ index  1), *, kScreenWidth,, 0,, kScreenWidth,, self.scrollView.frame.size.height)];=,imageView.image  [UIImage  imageNamed: self.imageNameList[指数]];   ,   ,(self.scrollView  addSubview: imageView);=,,self.scrollView.contentSize  CGSizeMake((时间+ index  2), *, self.scrollView.bounds.size.width,, 0);   ,}   ,   ,///在UIScrollView的最后面添加一张图片   ,UIImageView  * lastImageView =, [[UIImageView  alloc], initWithFrame: CGRectMake((时间+ self.imageNameList.count  1), *, kScreenWidth,, 0,, kScreenWidth,, self.scrollView.frame.size.height)];   ,///图片名是第一张图片=,lastImageView.image  [UIImage  imageNamed self.imageNameList.firstObject):;   ,[self.scrollView  addSubview lastImageView):;   ,   ,///设置UIScrollView的偏移量=,,self.scrollView.contentSize  CGSizeMake((时间+ self.imageNameList.count  2), *, self.scrollView.bounds.size.width,, 0);   ,   ,///设置UIScrollView的起始偏移距离(将第一张图片跳过)=,,self.scrollView.contentOffset  CGPointMake (kScreenWidth, 0);   ,   ,///图片总数=,,self.pageControl.numberOfPages  self.imageNameList.count;=,self.pageControl.currentPage  0;   }

其实,如果大家看到这里,应该就会大致明白无线轮播的实现原理了。接下来就是最后一步,在UIScrollView的代理方法里面写逻辑:判断UIScrollView的偏移量,当其滑动到首位时(显示的是最后一张图片),滑动停止,就把偏移量修改最后面图片的位置上(倒数第二张)。同理,当UIScrollView滑动到最后时(显示的是第一张图片),滑动停止,就把偏移量修改到第一张图片的位置上(正数第二张)。

# pragma  mark 作用;UIScrollViewDelegate   - (void) scrollViewDidEndDecelerating:(UIScrollView  *) scrollView  {   ,///当UIScrollView滑动到第一位停止时,将UIScrollView的偏移位置改变   ,if  (scrollView.contentOffset.x ==, 0), {=,,scrollView.contentOffset  CGPointMake (self.imageNameList.count  *, kScreenWidth,, 0);=,,self.pageControl.currentPage  self.imageNameList.count;   ,///当UIScrollView滑动到最后一位停止时,将UIScrollView的偏移位置改变   ,}else  if  (scrollView.contentOffset.x ==, (self.imageNameList.count  +, - 1) *, kScreenWidth), {=,,scrollView.contentOffset  CGPointMake (kScreenWidth, 0);=,self.pageControl.currentPage  0;   ,}else  {=,,self.pageControl.currentPage  scrollView.contentOffset.x /, kScreenWidth 作用;1;   ,}   }

iOS如何实现UIScrollView的无限轮播功能