Instagram/IGListKit 实践谈(UICollectionView框架)
2016-12-26 08:46
357 查看
简单介绍
IGListKit是Instagram推出的新的UICollectionView框架,使用数据驱动,旨在创造一个更快更灵活的列表控件。
github地址:https://github.com/Instagram/IGListKit
这个全新的控件一出来,我就赶快投入实践了一把。
先谈一谈我对这个控件的结论:这个框架设计的非常好,完美符合高内聚、低耦合。IGListKit 是一个很典型的使用 Objective-C 开发的,但却是个偏向使用 Swift 语言开发者的一个 UI 组件库。
使用过程也面临了一些疑惑,先谈一下使用收获:
它的优势在于flexible,比起原来的UICollectionView,在使用上更加灵活,在数据驱动上做的更好。
这个框架在fast上体现的还不够,但不妨碍我们自己进行下一步优化。
先看看IGListKit的结构
[b]
View Code
首先oldIndexs是一个栈的结构,过程是先遍历新数组,将数组里模型的id对应的hash值作为key,找到对应的Num成员对象(实际代码中为entry,可以理解为一种抽象)的oldIndexs栈存入NSNotFound。
再遍历旧数组,拿例子来说,就是将数组里模型的id 对应的hash值作为key,找到对应的Num成员对象里的oldIndexs栈增加旧数组的下标值。
如果是新增加的,那么在hashtable中key对应的value存入的Num成员对象就是notfound。
这样算法如图使用的数据结构(已简化,实际稍复杂些),可以绑定新旧数组的成员的对应关系,包括成员间的移动增加删除修改关系,对于像TableView或者CollectionView非常适合不过。
IGListKit是Instagram推出的新的UICollectionView框架,使用数据驱动,旨在创造一个更快更灵活的列表控件。
github地址:https://github.com/Instagram/IGListKit
这个全新的控件一出来,我就赶快投入实践了一把。
先谈一谈我对这个控件的结论:这个框架设计的非常好,完美符合高内聚、低耦合。IGListKit 是一个很典型的使用 Objective-C 开发的,但却是个偏向使用 Swift 语言开发者的一个 UI 组件库。
使用过程也面临了一些疑惑,先谈一下使用收获:
它的优势在于flexible,比起原来的UICollectionView,在使用上更加灵活,在数据驱动上做的更好。
这个框架在fast上体现的还不够,但不妨碍我们自己进行下一步优化。
先看看IGListKit的结构
[b]
let oldModel = [ Num(id: 1, name: "1"), Num(id: 2, name: "2"), Num(id: 3, name: "4"), Num(id: 4, name: "1"), ] let newModel = [ Num(id: 1, name: "1"), Num(id: 2, name: "2"), Num(id: 3, name: "3"), Num(id: 4, name: "5"), ] let result = IGListDiffPaths(0, 0, from, to, .equality).forBatchUpdates() tableView.beginUpdates() tableView.deleteRows(at: result.deletes, with: .fade) tableView.insertRows(at: result.inserts, with: .fade) for move in result.moves { tableView.moveRow(at: move.from, to: move.to) } tableView.endUpdates()
View Code
首先oldIndexs是一个栈的结构,过程是先遍历新数组,将数组里模型的id对应的hash值作为key,找到对应的Num成员对象(实际代码中为entry,可以理解为一种抽象)的oldIndexs栈存入NSNotFound。
再遍历旧数组,拿例子来说,就是将数组里模型的id 对应的hash值作为key,找到对应的Num成员对象里的oldIndexs栈增加旧数组的下标值。
如果是新增加的,那么在hashtable中key对应的value存入的Num成员对象就是notfound。
这样算法如图使用的数据结构(已简化,实际稍复杂些),可以绑定新旧数组的成员的对应关系,包括成员间的移动增加删除修改关系,对于像TableView或者CollectionView非常适合不过。
相关文章推荐
- 使用AsyncDisplayKit提升UICollectionView和UITableView的滚动性能
- IOS 支付宝-五福简单框架实现-线性滚动(UICollectionView)
- Model/View框架总体架构 分类: QT学习实践 2015-05-11 22:05 34人阅读 评论(0) 收藏
- UICollectionView高度宽度自适应缓存框架
- 使用AsyncDisplayKit提升UICollectionView和UITableView的滚动性能
- CC框架实践(2):Fragment和View的组件化
- Android显示框架:自定义View实践之绘制篇
- UIKit 框架之UICollectionViewController
- iOS无限轮播器框架(UICollectionView实现,添加了UIPageControl)
- 【程序思考】RIA 编程:将 View 从 MVC 框架中移走
- Java 理论与实践: 应用 fork-join 框架
- Spring Web 框架简介及NetBeans实践
- ava开源框架Seam实践经验谈
- Hadoop中的集群配置和使用技巧——分布式计算开源框架Hadoop入门实践(二)
- 如何不让Doc/View框架不创建新文档
- QT Graphics View 框架介绍
- Spring Web 框架简介及NetBeans实践
- [转自Scott]ASP.NET MVC框架(第三部分): 把ViewData从控制器传到视图
- 【程序思考】RIA 编程:将 View 从 MVC 框架中移走
- 开发.Net平台应用系统框架--实践