iOS图片的循环滑动

来源:互联网 发布:java specification 编辑:程序博客网 时间:2024/05/10 23:15

iOS图片的循环滑动

使用计时器,scrollView,pageControl完成图片的自动,手动循环滑动

该代码块中用到的图片直接使用的第三方SDWebImage异步加载网络图片,如有需要,可直接换成本地图片

.h文件@interface MyScrollViewOnView : UIView<UIScrollViewDelegate>{    UIScrollView *_scrollView;    UIPageControl *_pageControl;    NSTimer *_timer;}@property (nonatomic, strong) NSArray *imgArr;.m文件#import "MyScrollViewOnView.h"@implementation MyScrollViewOnView- (void)_initView{    //初始化scrollView    _scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];    _scrollView.delegate = self;    _scrollView.pagingEnabled = YES;    _scrollView.showsHorizontalScrollIndicator = NO;    _scrollView.showsVerticalScrollIndicator = NO;    //创建scrollView上的imageView    UIImageView *firstImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, _scrollView.width, _scrollView.height)];    //加载url图片,将第一个imgView显示最后一张图片      /*     如果是本地图片则使用     firstImgView.image = [UIImage imageNamed:@"001.png"];     */    [firstImgView sd_setImageWithURL:[NSURL URLWithString:[self.imgArr lastObject]]];    [_scrollView addSubview:firstImgView];    //创建数组中的图片用imgView显示出来    for (int i = 0; i < self.imgArr.count; i++) {        UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(_scrollView.width * (i + 1), 0, _scrollView.width, _scrollView.height)];        [imgView sd_setImageWithURL:[NSURL URLWithString:self.imgArr[i]]];        [_scrollView addSubview:imgView];    }    //创建最后一个imgView,显示的是第一张图片    UIImageView *lastImgView = [[UIImageView alloc] initWithFrame:CGRectMake(_scrollView.width * (self.imgArr.count + 1), 0, _scrollView.width, _scrollView.height)];    [lastImgView sd_setImageWithURL:[NSURL URLWithString:self.imgArr[0]]];    [_scrollView addSubview:lastImgView];    //设置内容视图    _scrollView.contentSize = CGSizeMake(_scrollView.width * (self.imgArr.count + 2), _scrollView.height);    [self addSubview:_scrollView];    //从第2个imgView开始,但是显示的图片是第一张    [_scrollView scrollRectToVisible:CGRectMake(_scrollView.width, 0, _scrollView.width, _scrollView.height) animated:NO];    //设置pageControl    _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, _scrollView.height - 20, _scrollView.width, 20)];    _pageControl.userInteractionEnabled = NO;    _pageControl.numberOfPages = self.imgArr.count;    _pageControl.currentPage = 0;    //    _pageControl.backgroundColor = [UIColor redColor];    [self addSubview:_pageControl];    //设置计时器    _timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];}- (void)timerAction:(NSTimer *)timer{    [_scrollView setContentOffset:CGPointMake(_scrollView.contentOffset.x + _scrollView.width, _scrollView.contentOffset.y) animated:YES];    //计算出当前的页数    NSInteger currentPage = floor((_scrollView.contentOffset.x - _scrollView.width / 2) / _scrollView.width) + 1;    _pageControl.currentPage = currentPage;    if (currentPage == self.imgArr.count) {        currentPage = 0;    }}- (void)setImgArr:(NSArray *)imgArr{    if (_imgArr != imgArr) {        _imgArr = imgArr;        [self _initView];    }}#pragma mark-----UIScrollViewDelegate- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{    [self scrollViewDidEndDecelerating:_scrollView];}- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{//    isDeceleration = NO;    //计算出当前的页数    NSInteger currentPage = floor((_scrollView.contentOffset.x - _scrollView.width / 2) / _scrollView.width) + 1;    if (currentPage == 0) {        //滑到第一个imgView,显示的是最后一张图片(往右划的情况)        [_scrollView scrollRectToVisible:CGRectMake(_scrollView.width * self.imgArr.count, 0, _scrollView.width, _scrollView.height) animated:NO];        _pageControl.currentPage = self.imgArr.count - 1;        NSLog(@"显示的是最后一张图片,倒数第二个imgView");        return;    }else if (currentPage == self.imgArr.count + 1){        //滑到了最后一张,但是显示的是第一张图片(往左划的情况)        [_scrollView scrollRectToVisible:CGRectMake(_scrollView.width, 0, _scrollView.width, _scrollView.height) animated:NO];        _pageControl.currentPage = 0;        NSLog(@"显示的是第一张图片,第二个imgView");        return;    }    _pageControl.currentPage = currentPage - 1;//    NSLog(@"current page-------%ld", _pageControl.currentPage);}- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{    [_timer invalidate];}- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{    _timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];}

如若代码中出现错误,欢迎指出。

0 0
原创粉丝点击