IOS 利用UIScrollView实现无限轮播图

来源:互联网 发布:java acos函数 编辑:程序博客网 时间:2024/06/14 12:19
  • 需要用到的控件 :

    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
原创粉丝点击