iOS--轮播图的实现

   //创建scrollview
    self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0,self.frame.size.width,self.frame.size.height)];
    self.scrollView.bounces = YES;
    self.scrollView.pagingEnabled = YES;
    self.scrollView.showsHorizontalScrollIndicator = NO;
    self.scrollView.showsVerticalScrollIndicator = NO;
    //创建pageControl
    self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(self.frame.size.width-100, self.scrollView.frame.size.height-10 , 100, 10)];
    self.pageControl.currentPageIndicatorTintColor = [UIColor redColor];
    self.pageControl.pageIndicatorTintColor = [UIColor blackColor];

    //scrollview  的contentSize大小
            self.mainView.scrollView.contentSize = CGSizeMake(self.view.frame.size.width *(self.imageArr.count+2), self.mainView.scrollView.frame.size.height);
            //默认从第一页开始
            [self.mainView.scrollView setContentOffset:CGPointMake(0, 0)];
            [self.mainView.scrollView scrollRectToVisible:CGRectMake(ScreenWidth, 0, ScreenWidth, self.mainView.scrollView.frame.size.height) animated:NO];
            self.mainView.scrollView.delegate = self;
            self.mainView.pageControl.numberOfPages = self.imageArr.count;
            self.mainView.pageControl.currentPage = 0;
            [self.mainView.pageControl addTarget:self action:@selector(turnPage) forControlEvents:UIControlEventValueChanged];
                    //添加图片
             for (int i = 0; i < self.imageArr.count; i ++) {
                 UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(i*ScreenWidth+ScreenWidth, 0, ScreenWidth, self.mainView.scrollView.frame.size.height)];
                 ScrollImage *image = [self.imageArr objectAtIndex:i];
                    [imageView sd_setImageWithURL:[NSURL URLWithString:image.imgsrc ]placeholderImage:[UIImage imageNamed:@"02.png"]];
                    imageView.userInteractionEnabled = YES;
                 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didClickImageView:)];
                 [imageView addGestureRecognizer:tap];
                 imageView.tag = 100+i;
                 [self.mainView.scrollView addSubview:imageView];
                }
            //取最后一张图片放在第0页
            UIImageView *firstImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, self.mainView.scrollView.frame.size.height)];
            ScrollImage *firstImage = [self.imageArr objectAtIndex:self.imageArr.count - 1];
            //指定图片
            [firstImageView sd_setImageWithURL:[NSURL URLWithString:firstImage.imgsrc] placeholderImage:[UIImage imageNamed:@"02.png"]];
            [self.mainView.scrollView addSubview:firstImageView];
            //取第一张图片放在最后一页
            UIImageView *lastImageView = [[UIImageView alloc] initWithFrame:CGRectMake(ScreenWidth*(self.imageArr.count + 1), 0, ScreenWidth, self.mainView.scrollView.frame.size.height)];
            ScrollImage *lastImage = [self.imageArr objectAtIndex:0];
            [lastImageView sd_setImageWithURL:[NSURL URLWithString:lastImage.imgsrc] placeholderImage:[UIImage imageNamed:@"02.png"]];
            [self.mainView.scrollView addSubview:lastImageView];
            //定时器  循环播放
            self.myTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(runTimePage) userInfo:nil repeats:YES];
        }
#pragma mark -----------轮播实现-------------
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    //关闭定时器
    [self.myTimer invalidate];
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    //开启定时器
    self.myTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(runTimePage) userInfo:nil repeats:YES];
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
    CGFloat pagewidth = ScreenWidth;
    NSInteger page = floor((self.mainView.scrollView.contentOffset.x - pagewidth/([self.imageArr count]+2))/pagewidth)+1;
    page --;  // 默认从第二页开始
    self.mainView.pageControl.currentPage = page;

}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    
    CGFloat pagewidth = ScreenWidth;
    NSInteger currentPage = floor((self.mainView.scrollView.contentOffset.x - pagewidth/ ([self.imageArr count]+2)) / pagewidth) + 1;
    if (currentPage==0)
    {
        [self.mainView.scrollView scrollRectToVisible:CGRectMake(ScreenWidth * [self.imageArr count],0,ScreenWidth,self.mainView.scrollView.frame.size.height) animated:NO]; // 序号0 最后1页
    }
    else if (currentPage==([self.imageArr count]+1))
    {
        [self.mainView.scrollView scrollRectToVisible:CGRectMake(ScreenWidth,0,ScreenWidth,self.mainView.scrollView.frame.size.height) animated:NO]; // 最后+1,循环第1页
    }

}

- (void)turnPage {
    
    NSInteger page = self.mainView.pageControl.currentPage; // 获取当前的page
    [self.mainView.scrollView scrollRectToVisible:CGRectMake(ScreenWidth*(page+1),0,ScreenWidth,self.mainView.scrollView.frame.size.height) animated:NO]; // 触摸pagecontroller那个点点 往后翻一页 +1
}

- (void)runTimePage {
    NSInteger page = self.mainView.pageControl.currentPage; // 获取当前的page
    page++;
    page = page > (self.imageArr.count - 1) ? 0 : page ;
    self.mainView.pageControl.currentPage = page;
    [self turnPage];
}

 

原文地址:https://www.cnblogs.com/zhangshan/p/4202629.html