这篇文章源于对一个可横向滚动并选择的类目控件的重构。最近在学Swift
,所以把这个控件的核心逻辑(Cell重用)用Swift
重写出来分享给大家。当然这不是Apple官方的Cell重用机制,因为Apple不开源.这篇文章应该会对正在学习Swift
并且想了解Cell重用实现的同学有一定帮助。文章中涉及到的代码都放在了Github(ZXOptionBar-Swift),欢迎大家提issues,求血求虐求羞辱~
第一个版本中这个控件承载了数据、视图、动画等所有的逻辑,使得这个控件在后期变得很难维护。所以我必须重构这个控件,而想到UITableView
也是一个可滚动可选择的控件,我为什么不把它做成一个类似UITableView
一样的横向滚动的控件呢。通过delegate
和dataSource
把数据和动画从控件中分离出来,通过cell重用减小cell初始化的开支。
可是,Apple的UIKit
不开源啊,怎么办呢?twitter为我们提供了很好的参考,那就是TWUI,这是twitter当年在MacOS上实现的类似UIKit
的一个库,虽然已经2年没有更新了,但是里面还是有不少可以挖掘的好东西,比如Twitter版的UITabelView
的Cell重用机制。
UITableView
是分很多section
的,但是横向滚动的控件一般只会有一种Cell,不会像UITableView
一样需要分很多不同种类的Cell,所以我们可以改造TWUI的Cell重用机制,使它更适合横向滚动的视图控件。
Note:之前在团队内部做过一个这个控件的Cell重用的分享,用Keynote演示,不过是用Objective-C描述的,对于理解上会有帮助。Keynote文件也在Github上。
阅读全文→