iOS开发中利用UICollectionView创建文字轮播控件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/79912517

背景:

公司项目中有一个需求:在首页上添加一个纵向滚动的文字轮播广告。

效果图:

轮播效果图 实现过程:

  1. 上网搜索相关demo
  2. 搜到一个demo,demo是利用UIScrollView实现的
  3. 思考:既然能用UIScrollView实现为什么不用UITableView去实现呢?使用UITableView就不用考虑复用以及调整scrollView上子控件位置的问题了。
  4. 手动敲代码利用UITableView实现具有需求效果的控件,可当UITableView滑动到最后一个cell再滑动到第一个cell的时候出现问题(并不能很流畅地从最后一个cell滑动回第一个cell)。
  5. 网上再搜索相关demo,发现了利用UICollectionView实现该效果的一个demo。发现此demo的效果很好、代码易于理解、可扩展性高。
  6. 自己手动敲一个demo实现需求的效果。

手动敲demo:

先在当前控制器的view上添加一个UICollectionView,每个item的大小等于UICollectionView的大小。再添加一个定时器,每隔一定的时间让UICollectionView进行滚动。

滚动代码:

// 1、当前正在展示的位置

    NSIndexPath *currentIndexPath = [[self.collectionView indexPathsForVisibleItems] lastObject];

//    NSLog(@"current:%lu", currentIndexPath.row);

    // 马上显示回最中间那组的数据

    NSIndexPath *resetCurrentIndexPath = [NSIndexPath indexPathForItem:currentIndexPath.item inSection:0.5 * scrollMaxSections];

    [self.collectionView scrollToItemAtIndexPath:resetCurrentIndexPath atScrollPosition:UICollectionViewScrollPositionBottom animated:NO];

   // 2、计算出下一个需要展示的位置

    NSInteger nextItem = resetCurrentIndexPath.item + 1;

    NSInteger nextSection = resetCurrentIndexPath.section;

    if (nextItem == 5) {

        nextItem = 0;

        nextSection++;

    }

    NSIndexPath *nextIndexPath = [NSIndexPath indexPathForItem:nextItem inSection:nextSection];

// NSLog(@”next:%lu”, nextIndexPath.row);

// 3、通过动画滚动到下一个位置
    [self.collectionView scrollToItemAtIndexPath:nextIndexPath atScrollPosition:UICollectionViewScrollPositionBottom animated:YES];

注意:scrollMaxSections是一个数值较大的section返回数。

  • (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return scrollMaxSections;

} 最终实现效果:

最终效果图 demo地址:https://gitee.com/liangsenliangsen/uicollectionview_text_carousel

本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏YoungGy

FSWD_BootStrap

Course Overview 响应式设计 grid system CSS Button Form Tables panel well image media ...

20990
来自专栏一“技”之长

iOS开发中行高灵活可变的UITableView的性能优化

        在新闻类,电商类等应用中,应用着大量的图文混排视图,在表视图UITableView中,开发者通常需要在如下代理方法中计算出当前cell填充内容后...

9820
来自专栏哈雷彗星撞地球

RunLoop总结:RunLoop的应用场景(三)滚动视图流畅性优化

今天要讲的RunLoop的应用场景可能太简单了,所以东西比较少。因为跟UITableView、UICollectionView等的滑动优化有关,就顺便总结一下会...

18930
来自专栏糊一笑

移动端Webapp中的那些Bug

持续更新… 测试浏览器 Chrome: 61.0.3163.73 Safari: 10.0(IOS 10.3.3) Github: webapp-bugs 1....

1.3K50
来自专栏QQ音乐前端团队专栏

制作60fps的高性能动画

说到web的高性能动画,这部分内容其实已经是老生常谈的了,不过其中还是有不少比较新的而且非常实用的内容可以和大家分享一下。

94040
来自专栏Guangdong Qi

iOS开发常用之UI下拉刷新

59410
来自专栏nnngu

基于 React + Webpack 的音乐相册项目(下)

上一篇我们完成了音乐相册里面的播放图片的功能,这一篇主要完成的是音乐相册里面的音乐播放器功能。最终让我们基于 React 的音乐相册图文并茂、有声有色。 我们主...

664110
来自专栏LeeCen

将原点移动到navigationBar下面(或UIScrollView和 cell加载子视图偏移64问题)

10220
来自专栏吴老师移动开发

【iOS开发】我是这样封装view的前言示例关于扩展

一个有经验的开发,碰到一些特殊的UI控件,脑海中应该是有好几种实现方案的,同时也能记起一些第三方相似的开源控件。为了应对产品的需求变更,UI效果的变更,以及做到...

16010
来自专栏java一日一条

9 款样式华丽的 jQuery 日期选择和日历控件

现在的网页应用越来越丰富,我们在网页中填写日期和时间已经再也不用手动输入了,而是使用各种各样的日期时间选择控件,大部分样式华丽的日期选择和日历控件都是基于jQu...

4.7K10

扫码关注云+社区

领取腾讯云代金券