美文网首页
轮播图(UICollectionView) 无限循环

轮播图(UICollectionView) 无限循环

作者: 面条168 | 来源:发表于2018-04-05 14:42 被阅读261次

需求是 app 首页 banner 图

1,循环滑动

2,左右翻页

3,自动滑动

原理:

用的是一个 UICollectionView 实现

1,把数据源扩大 (2倍 + 1) 

- (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section

{

    // self.datas.count * 2      防止 第一个往左轮播时数组越界

    // self.datas.count * 2 + 1  防止 最后一个往右轮播时数组越界

    return self.datas.count * 2 + 1;

}

2,将要停止拖拽时

- (void)scrollViewWillEndDragging:(UIScrollView*)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inoutCGPoint*)targetContentOffset

{

    CGPoint target = [self nearestTargetOffsetForOffset:*targetContentOffset];

    targetContentOffset->x= target.x;

    targetContentOffset->y= target.y;

}

- (CGPoint)nearestTargetOffsetForOffset:(CGPoint)offset

{

    CGFloat pageSize = self.collectionView.frame.size.width;

    CGFloatpreFixSize = pageSize - (CGRectGetWidth(self.collectionView.frame) - pageSize) /2;

    NSIntegerpage  =round((offset.x- preFixSize)/ pageSize);

    CGFloattargetX = page * pageSize;

    returnCGPointMake(targetX + preFixSize, offset.y);

}

3,停止拖拽时和停止动画时 

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView*)scrollView

{

    [self scrollToNextDone];

}

- (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView

{

    [self scrollToNextDone];

}

- (void)scrollToNextDone

{

    [self stopTimer];

    [self startTimer];

    CGPoint center = CGPointMake(self.collectionView.contentOffset.x + self.collectionView.center.x, self.collectionView.center.y);

    NSIndexPath *nowIndexPath = [self.collectionView indexPathForItemAtPoint:center];

    if(nowIndexPath &&self.datas.count!=0) {

        NSIndexPath *nextIndexPath = [NSIndexPath indexPathForItem:(nowIndexPath.item % self.datas.count + self.datas.count) inSection:0];

// 取 self.datas.count + (1~~~ self.datas.count-1)

        [self.collectionView scrollToItemAtIndexPath:nextIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];

    }

}

源代码地址:

https://github.com/miantiao77/LXCyCleProject.git

相关文章

  • 轮播图(UICollectionView) 无限循环

    需求是 app 首页 banner 图 1,循环滑动 2,左右翻页 3,自动滑动 原理: 用的是一个 UIColl...

  • 利用UICollectionView实现无限循环轮播图

    之前写的项目,几乎每一个都会用到循环轮播图,于是很早之前就自己写了一个,并一直在使用。在使用过程中也会将出现的BU...

  • ios无限轮播图

    一个非常简单但很实用的无限轮播图(swift版本)UICollectionView无限轮播效果已经有很多前辈定制过...

  • 2018-03-09

    UICollectionView在一个页面中,既有轮播图 又有UICollectionView时,需要点击轮播图 ...

  • UICollectionView基础

    UICollectionView基础 UICollectionView无限循环 UICollectionView分组

  • 无限Banner轮播图

    GJImageCarouselView 自己写的Banner轮播图,自动循环,无限轮播。可以设置时间间隔、占位图。...

  • 无限循环轮播图

    无限循环轮播图 在工作的过程中,很多情况下会遇到要使用轮播图,相信大家也遇到过,使用轮播图的话分两种情况:不能无限...

  • 利用UICollectionView实现无限轮播(Swift)

    1、主要使用UICollectionView实现无限轮播图,封装成一个控件(集成UIView),方便使用。 创建空...

  • UICollectionView 实现无限轮播

    UICollectionView实现无限轮播 把数据源给加载成百上千 利用数量取余一循环的数组数量 就是当前下标 ...

  • 无限轮播专题系列之UICollectionView篇

    无限轮播专题系列之UICollectionView篇 开题概述 之所以将无限轮播作为专题来讲是因为使用的太广泛,几...

网友评论

      本文标题:轮播图(UICollectionView) 无限循环

      本文链接:https://www.haomeiwen.com/subject/mhtdhftx.html