iOS
英文原文:
Open sourcing the “quilt” view for iOS
我们很高兴地宣布,1000memories已经在MIT协议下开源了它的iOS瀑布流视图控件"quilt"。
瀑布流(quilt)-以不同的纵横比在多个列中显示图片和媒体,是1000memories网站、iPhone和Android版ShoeBox的设计美学核心。它给了用户一种真实相册的感觉并强调了老照片的美。
除了1000memories之外,瀑布流式的设计在网站和移动应用领域的应用越来越普遍(如:Pinterest, 500px和Fab)。我们希望TMQuiltView可以成为iOS开发者的一个选择来给他们的应用带来类似的体验。
TMQuiltView的实现
TMQuiltView的原型由UITableView而来,它主要实现两个简单的工程目标:
- 为开发者提供简单友好的接口
- 平滑的滚动性能,即使有成千上万个单元
下面是我们实现TMQuiltView时考虑的几个细节:
数据源(Data source)和委托(delegate)-我们使用和UITableView类似的委托和数据源(如cellAtIndexPath)。请注意,quilt视图本身并没有“行”因为不同列中的单元不是水平对齐的。不过我们使用NSIndexPath来保持和NSFetchedResultsController的兼容性。虽然数据源定义了单元格的顺序,但没有指定列(见“列”)。
单元格循环-像UITableView那样,quilt只维护可见的单元格对象。这使得即使有成千上万个单元quilt也只需创建很少的单元格对象,保证快速加载和平滑滚动。
数据源变化-quilt视图需要反映出数据源的任何变化,包括添加、删除、改变顺序。由于经常会有多个变化同时发生,我们采用批量的方式处理它们。quilt也会处理个别的变化,在视图控制器中调用endUpdates方法来提交所做的改变,重新计算一次布局。
列-和UITableView的主要区别之一是使用多个列。quilt通过给每个单元格分配它们最小的高度来保持列的平衡。
屏幕方向变化-quilt支持的列数量和屏幕方向有关。TMQuiltViewController会根据屏幕方向自动重载数据。
定制-大多数定制的地方应该都在单元格上。但是,quilt委托提供了定义外边距、单元格高度和列数目的方法。
实例
TMQuiltView是很灵活的,可以通过很多不同的和创造性的方式来使用,如下面例子所展示:
源码,说明和反馈
TMQuiltView的源码在MIT协议下开源:
https://github.com/1000Memories/TMQuiltView
源码里包含了一个实例程序
下一步quilt将会包括ARC支持、布局变化时的区域和动画处理。
欢迎提交反馈、建议或贡献代码。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
2KB翻译工作遵照
CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务