IOS 利用UIScrollView实现无限轮播图

  • 需要用到的控件 :

    UIScrollView :用来显示滚动图片

    UIPageControl:显示滚动的当前页

  • 实现的代理

    UIScrollViewDelegate

  • 实现的代理方法

    1、- (void)scrollViewDidScroll:(UIScrollView *)scrollView

          2、- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

          3、- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView  willDecelerate:(BOOL)decelerate


    实现思路及部分代码:

         思路:利用scrollView的属性contentOffset.x(偏移量)判断当前视图是向左移动还是向右移动

    重点在于当视图滚动到最后一张的时候怎么才能让它继续向后滚动,而不是向前移动到第

    一个而后继续滚动。既然它滚动到最后一张还要往后滚动,那么我们可以将视图集合中的

    最后元素的接下来的元素设置为原来集合中的第一个元素。这就需要视图每滚动一次就得

    做一次元素的移动。

    部分代码:

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
    if (scrollView.contentOffset.x >= 2 * CGRectGetWidth(self.bounds)) {
    id firstsObject = [_imagesArray.firstObject mutableCopy];
    [_imagesArray removeObjectAtIndex:0];
    [_imagesArray addObject:firstsObject];
    self.pageControl.currentPage = self.pageControl.currentPage == self.imagesArray.count - 1?0 : 

    ++self.pageControl.currentPage;
    } else if (scrollView.contentOffset.x <= 0){
    id lastObject = [_imagesArray.lastObject mutableCopy];
    [_imagesArray removeLastObject];
    [_imagesArray insertObject:lastObject atIndex:0];
    self.pageControl.currentPage = self.pageControl.currentPage == 0 ? _imagesArray.count - 1 : 

    --self.pageControl.currentPage;
    } else {
    return;
    }
    [self reloadImage];
    scrollView.contentOffset = CGPointMake(CGRectGetWidth(self.bounds), 0);
    } - (void)reloadImage
    {
    int index = 0;
    for (UIImageView *imageView in self.imageViewArray) {
    UIImage *image = [UIImage imageNamed:self.imagesArray[index]];
    imageView.image = image;
    index ++;
    }
    }

    - (void)addTimer
    {
    // 启动定时器
    _timer.fireDate = [NSDate dateWithTimeIntervalSinceNow:3];
    self.timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(respondsToTimer) use rInfo:nil repeats:YES];
    }

    - (void)respondsToTimer {
    // 将滚动视图的偏移量显示在右边视图上计时器开始就让视图向右滚动
    [_scrollView setContentOffset:CGPointMake(2 * CGRectGetWidth(self.bounds), 0) animated:YES];
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值