iOS UIScrollView ,UIPageControl实现无限循环翻页

//初期化

self.scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, DEVICE_WIDTH, 120)];

self.scrollView.showsHorizontalScrollIndicator = NO;

self.scrollView.showsVerticalScrollIndicator = NO;

self.scrollView.pagingEnabled = YES;

self.scrollView.delegate = self;

self.scrollView.directionalLockEnabled = YES;

self.scrollView.bounces = NO;

self.scrollView.scrollsToTop = NO;

[self.view addSubview:self.scrollView];

self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 100,DEVICE_WIDTH, 10)];

self.pageControl.pageIndicatorTintColor =COLOR_3;

self.pageControl.currentPageIndicatorTintColor = [UIColor whiteColor];

[self.scrollBgView addSubview:self.pageControl];

//初期化总页数

self.totalPage = [self.dataArray count];

//当前页数

self.curPage = 1;

//PageCotrol控件总页数添加

self.pageControl.numberOfPages = self.totalPage;

//页面翻页后的刷新方法

-(void)refreshScrollView

{

    [[self.scrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

    NSMutableArray * tempArray = [[NSMutableArray alloc]init];

    int max = 3;

    if ([self.dataArray count] == 1) {

        max = 1;

        [tempArray addObject:self.dataArray[0]];

    } else {

       NSInteger before = [self getPageIndex:self.curPage - 1];

        NSDictionary * dic0 = self.dataArray[before -1];

        [tempArray addObject:dic0];

        NSDictionary * dic1 = self.dataArray[self.curPage - 1];

        [tempArray addObject:dic1];

        NSInteger after = [self getPageIndex:self.curPage + 1];

        NSDictionary * dic2 = self.dataArray[after -1];

        [tempArray addObject:dic2];

    }

    for (int i = 0; i < max; i++) {

   UIView * pageView = [[UIView alloc]initWithFrame:CGRectMake(i * DEVICE_WIDTH, 0, DEVICE_WIDTH, 120)];

        [self.scrollView addSubview:pageView];  

        //Todo添加页面上内容

    }

    if ([self.dataArray count] == 1) {

        self.scrollView.contentSize = CGSizeMake(DEVICE_WIDTH, self.scrollView.frame.size.height);

        self.scrollView.contentOffset = CGPointMake(0, 0);

    } else {

       self.scrollView.contentSize = CGSizeMake(DEVICE_WIDTH * 3, self.scrollView.frame.size.height);

        self.scrollView.contentOffset = CGPointMake(self.scrollView.frame.size.width, 0);

    }

    self.pageControl.currentPage = self.curPage - 1; 

}

//获取当前页

- (NSInteger)getPageIndex:(NSInteger)index

{

    // value=1为第一张,value = 0为前面一张

    if (index == 0)

    {

        index = self.totalPage;

    }

    

    if (index == self.totalPage + 1)

    {

        index = 1;

    }

    return index;

}

 

#pragma mark UIScrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    if (self.scrollView.contentOffset.y < 0) {

        self.scrollView.contentOffset = CGPointMake(self.scrollView.contentOffset.x, 0);

    }

    

    if (self.scrollView.contentOffset.y > 0) {

        self.scrollView.contentOffset = CGPointMake(self.scrollView.contentOffset.x, 0);

    }

    

    NSInteger x = self.scrollView.contentOffset.x;

    

    // 往下翻一张

    if (x >= 2 * self.scrollView.frame.size.width)

    {

        self.curPage = [self getPageIndex:self.curPage + 1];

        [self refreshScrollView];

    }

    

    if (x <= 0)

    {

        self.curPage = [self getPageIndex:self.curPage - 1];

        [self refreshScrollView];

    }

}

转载于:https://my.oschina.net/StriveBoy/blog/855982

本Demo使用UICollectionView实现自动无限轮播功能。 主要功能: 1.实现自动轮播,可修改轮播的时间 2.轮播图片可以来自本地,也可来自网络,通过单独的方法进行设置即可。对于加载网络图片时,Demo中使用了YYWebImage,也可自行替换成SDWebImage。 3.重写了和系统UIPageControl一样的功能,可用图片代替PageControl上的点点,也可自定义其颜色以及切换动画。 使用方法:使用方法比较简单。 /** * 加载本地图片Banner */ - (void)setupLocalBannerImageView { NSArray *array = @[@"1.png", @"2.png", @"3.png", @"4.png", @"5.png"]; FFBannerView *bannerVew = [FFBannerView bannerViewWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 200) locationImageArray:array]; bannerVew.timeInterval = 2.0; [self.view addSubview:bannerVew]; } /** * 加载网络图片Banner */ - (void)setupNetWorkBannerImageView { NSArray *array = @[@"http://i3.download.fd.pchome.net/t_960x600/g1/M00/07/09/oYYBAFMv8q2IQHunACi90oB0OHIAABbUQAAXO4AKL3q706.jpg", @"http://images.weiphone.net/attachments/photo/Day_120308/118871_91f6133116504086ed1b82e0eb951.jpg", @"http://benyouhuifile.it168.com/forum/macos/attachments/month_1104/110425215921926a173e0f728e.jpg", @"http://benyouhuifile.it168.com/forum/macos/attachments/month_1104/1104241737046031b3a754f783.jpg"]; FFBannerView *bannerVew = [FFBannerView bannerViewWithFrame:CGRectMake(0, 250, [UIScreen mainScreen].bounds.size.width, 200) netWorkImageArray:array placeHolderImage:nil]; bannerVew.timeInterval = 2.0; bannerVew.pageControlStyle = FFPageControlStyleMiddle; bannerVew.delegate = self; [self.view addSubview:bannerVew]; } 以上方式即可简单使用,如需自定义PageControl也可继承FFAbstractDotView,做些基本的设置即可。 gitHub下载地址:喜欢的朋友请给个星呗! 欢迎各位一起来讨论,有问题请发邮箱270452746@qq.com或者直接加我QQ:270452746进行讨论。谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值