开源方案候选:
https://github.com/gsdios/SDCycleScrollView “iOS第一图片轮播器”
实现原理解释:
http://shengpan.net/pscarouselview/
谈谈组件封装的思路和实现--PSCarouselView
前两天面试了一个应聘者,他的演示项目里有广告轮播功能。恰好之前我封装过一个实现了此功能的控件,于是就顺着他广告轮播的实现一直往下聊,从需求的抽象一直聊到各种实现的细节和需要考虑的问题等等。组件的封装是开发中比较有趣的一件事。今天我们就拿轮播控件举例,聊聊组件的封装。
授人予渔先要授人予鱼。先给出鱼(PSCarouselView),再慢慢讲渔。
分析需求
一般来说,我们在封装组件的时候,会先思考以下几点
- 这个组件要做什么
- 这个组件至少需要知道哪些信息
- 这个组件会反馈哪些信息
这个阶段,我们还不会考虑组件的具体实现,仅仅对其做抽象。我们要做的东西不仅仅是适用于单个项目的,而应该是通用的,可以适应大部分同种类需求的。
Scene I
BA说,客户要在首页加个轮播。于是半天后设计师出了张图,看起来大概像这样:
我们按照上面的思路,拆分一下这个需求。
这个组件要做什么
显而易见的:
1.展示多张图片
2.可以向左向右翻页
3.PageControl的状态会根据图片的滚动而相应改变
隐含可能要做的:
1.支持左右两侧无限循环滚动
2.自动轮播
3.支持手动滑动
4.支持点击并进行相关的响应
5.图片的缓存
这个组件至少需要知道哪些信息
一个封装得优秀的复杂度不高组件就像一个魔法盒子,只需要触发启动开关,就可以达到你期待的效果。极简的触发参数和条件是组件封装的精髓。在内容型App中,轮播图一般会用作推荐内容展示区域。在O2O类App中,轮播图一般会用作广告位。因此轮播区域图片的内容绝大多数都是动态的。在一般的C/S开发中,客户端要获取存储在服务器上的图片会获取它的URL,然后在需要的时候根据URL异步地加载这些图片。因此,我们找出了的轮播空间第一个必备条件: