作为一个资深(自认为)iOS程序猿,会经常用到轮播图,但是总是感觉自己实现要比直接用别人的要方便一点,并且有一些需求需要深度定制,于是想着自己封装一个可以定制化的轮播图库JCyclePictureView。

GitHub地址

1、核心代码

数据处理

通过更改数据源来给用户一个假象,图片在无限滚动(其实一共只有3个 cell),默认显示第一个,右滑 index + 1, 左滑 index - 1,然后修改数据源,异步回到第一个cell(注意不能有动画)

滑动事件

2、可定制 cell

深度定制 cell
自定义 cell 的回调

本质为UICollectionView 的cellForItemAt 代理,需自己实现赋值逻辑

cellForItemAt

3、滚动方向

轮播图滚动方向

支持 上下左右 四种滚动方式

定时器事件

实际为 UICollectionView 用动画滚动到 第0个 cell 还是第2个 cell

UICollectionView动画

4、PageControl

为实现可支持图片的PageControl,写了一个继承UIPageControl 的 JPageControl

JPageControl

红框内为核心代码,原理其实很简单,在每一个 显示的点上面添加一张图片,然后根据 currentPage 属性修改图片

JPageControl对齐方式

目前对齐方式支持 left、center、right,通过修改 frame 确定位置

5、其它需求

init方法

pictures 可以之后设置 pictures支持本地、网络图片同时加载

轮播图标题

设置标题时 PageControl 自动右对齐

点击图片回调

index 从0 开始

自动播放时间

小于0.5秒不自动播放(如果不想自动播放可以 设为 0)

图片的ContentMode

设置图片的ContentMode

6、用法

用法
自定义 cell

如果使用过程中出现问题,可随时 mr_banma@126.com 邮件联系。

ps:如果喜欢,记得 Star 一下,谢谢支持

源码

转载于:https://juejin.im/post/5a3a159a5188257d38441c31

Swift 4 无限滚动轮播图(UICollectionView实现)相关推荐

  1. CSS3实现列表无限滚动/轮播

    使用CSS3实现列表的无限滚动/轮播 效果预览 思路 将当前列表滚动至最后一项的末尾,然后瞬间切换回第一项 问题点 用什么方式实现无限轮播 这个问题就是列表滚动到最后时底部会留白(有多余空间)如何处理 ...

  2. 原生JS实现PC端无缝滚动轮播图、匀速轮播图、匀速动画

    offset家族的了解 1.offsetHeight:元素的offsetHeight是一种元素CSS高度的衡量标准,包括元素的边框.内边距和元素的水平滚动条(如果存在且渲染的话),不包含:before ...

  3. JS经典案例-无缝滚动轮播图(纯JS)

    滚动轮播图 在JS初级阶段,轮播图是最基础最经典的案例,而相比于渐变轮播图,无缝滚动轮播图又要更难一点.渐变轮播图仅需要使用到点击事件.定时器等,而无缝滚动轮播图则需要考虑到 第一张>最后一张, ...

  4. 滚动轮播图+滚动轮播图定时器的添加(还原lol首页的轮播图)

    滚动轮播图+滚动轮播图定时器的添加(还原lol首页的轮播图) 每一步都有详细的注释: <!DOCTYPE html> <html lang="en"> &l ...

  5. html5图片无限循环播放,原生js实现无限循环轮播图效果

    知识要点 1.实现无限循环的原理: 以偏移的距离来判断是否跳回第一张和最后一张 也可以利用循环判断图片的当前索引值 var newLeft=parseInt(list.style.left)+offs ...

  6. 一种无限循环轮播图的实现原理

    本文来自 http://www.jianshu.com/p/ef03ec7f23b2 轮播实现步骤 接下来,笔者将从各方面逐一分析 层级结构 最底层是一个UIView,上面有一个UIScrollVie ...

  7. 原生js实现触摸滚动轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. js原生选项卡(自动播放无缝滚动轮播图)二

    今天分享一下自动播放轮播图,自动播放轮播图是在昨天分享的轮播图的基础上添加了定时器,用定时器控制图片的自动切换,函数中首先封装一个方向的自动播放工能的小函数,这个函数中添加定时器,定时器中可以放向右走 ...

  9. JavaScript+HTML+CSS 无缝滚动轮播图的两种方式

    第一种方式 在轮播图最后添加第一张,一张重复的图片. 点击前一张,到了第一张,将父级oList移动到最后一张(也就是添加的重复的第一张),在进行后续动画. 点击下一张,到了最后一张(也就是添加的重复的 ...

最新文章

  1. python读取文件读不出来-python文件读取失败怎么处理
  2. arm linux 内核启动,Linux(ARM)内核启动地址
  3. VTK修炼之道7_三维场景基本要素:光照
  4. Mathtype全文公式大小一致调整
  5. php让代码重新运行一次,脚本运行时是否可以动态重新加载PHP代码?
  6. Linux下网卡绑定模式
  7. Python+OpenCV:图像轮廓
  8. AD调出LM358\393元器件不同部分A和B的part
  9. python功能二维表合并,一维表内嵌元祖合并以及取交集,并集,差集
  10. 基于javaweb+springboot的学生学科竞赛管理管理系统设计和实现(java+springboot+ssm+maven)
  11. QT中双击mdiArea区域打开文件(监听双击事件)
  12. C#强密匙加密文件.snk
  13. springboot微信点餐系统项目设计
  14. python负数的处理
  15. ODCC2017 浪潮展示多款JDM创新成果
  16. 关于世博会的一些遐想!
  17. 盘点 2021 年十大网络安全事件
  18. 基于51单片机超声波的停车场车位管理系统proteus仿真原理图PCB
  19. php 正则手机 w3c,最新手机号码正则表达式(php版)
  20. 安装MATLAB时应如何选择产品组件

热门文章

  1. RTOS之uCOS-II源码下载及源码目录结构、常见的RTOS!
  2. JavaScript四舍五入的改进
  3. css3多行超出隐藏并打点点
  4. c语言学习之基础知识点介绍(十二):结构体的介绍
  5. strace使用详解(未研究)
  6. Playframework2 标签速记
  7. ArcGIS地理信息系统空间分析实验教程第一章 导论
  8. 使用Lombok优化代码
  9. php排字符串的高低位怎么区分,PHP-根据字符串和所用字体计算字符串所占宽高...
  10. 麦当劳java排班_学习肯德基排班管理系统