Appstore Banner控件趟坑记


由于工作需要,最近需要做一个类似苹果Appstore顶部Banner在大屏机上的效果,折腾了小一天,把整个折腾的过程记录一下。
这个控件有这么几个特点:

  1. 有ScrollView的paging效果,停止态是中间Banner在屏幕中间
  2. 左右两边会各漏出来两边的Banner
  3. 能循环播放
实现一:

用CollectionView实现,其实就是个单行的FlowLayout,clipsToBounds关掉。
遇到了一个坑:如果想用原生的paging效果,CollectionView的尺寸必须是一个Cell的大小,由于复用机制,总会有一个Cell展示不出来。效果会是下面这个样子:


实现二:

此时想简单实现,还是用CollectionView,把paging关掉,自己实现一套paging效果,为了让所有Cell都展示,还是把CollectionView拉到屏幕那么宽。如图:



然后第二个坑就来了:本以为paging无非就是在停止拖拽的时候加个动画回到中间,然而苹果的paging效果是复杂多的,比如左右swap的时候能直接翻页等等。而且我要的翻页效果,停止态要把当前Cell停在中间,这个坐标计算的代码也挺复杂,再加上能循环播放,最终代码会复杂到让后人看不懂。。
考虑再三,弃之。。

实现三:

直接用ScrollView实现,打开paging效果,关掉clipsToBounds,实现循环播放,自己撸一套CollectionView,这样Cell展示与否全由我自己控制。当然,追求完美的我还做了Cell的复用,其实没必要,Banner总数量不会很多。刨除自身的业务逻辑,整个控件代码控制在200行以内。



功能完成~

回想过来,其实第一个实现是离目标最近的一个,如果CollectionView能让我自由控制屏幕外的Cell是否展示就好了,但没有找到方法,欢迎iOS大神前来打脸。

其实整个过程下来也没有什么高深的技术,类似tableView的重用技术也没太多难点。记得之前iOS招人的时候总会面iOS底层或深挖一些基础知识,但其实做UI还是iOS人最基本的技能。记得11年那会儿乔布斯的年代,人人都喊用户体验,现如今运营为王,纯app的交互体验已经不那么被人重视。不过在我眼里,能深挖底层技术,能精雕细琢炫酷的交互动画,才是乔帮主引领的一代好青年,哈哈~~~

你可能感兴趣的:(Appstore Banner控件趟坑记)