一, 简介
ZZFLEX 是一个基于 UIKit 开发的完善的 iOS UI 敏捷开发框架, 包含常用控件的链式 API 拓展, 一个数据驱动的列表框架, 一个事件处理队列.
GitHub:https://github.com/tbl00c/ZZFLEX
1.gif
二, 功能模块
2.1,UIView+ZZFLEX
UIView+ZZFLEX 为 UIkit 中的常用控件增加了链式 API 的拓展, 引入它后, 我们可以直接为 view addButton, addLabel, addImageView 等. 然后通过链式 API, 可更加连贯快捷的进行控件的属性设置, Masonry 布局和事件处理.
以给视图添加 button 为例说明:
demo2.PNG
可以看出, 链式 API 十分的简洁高效, 在大大缩减代码行数的同时, 提高了代码的可读性. 它使得同一控件的代码逻辑得以集中, 我们称之为 "控件的模块化".
UIView+ZZFLEX 是使用 Objective-C 的泛型实现的, 可以无视继承关系, 随意顺序设置控件属性.
如需对控件的属性进行编辑, 可以这样写:
button.zz_make.frame(CGRectMake(0, 0, 100, 40)).title(@"hi").titleColor(@"how are u");
如需单独创建一个控件, 不添加到视图上:
UIButton *button = UIButton.zz_create(1001).title(@"hello").titleHL(@"world").view;
会发现, 在添加视图的时候, ZZFLEX 会强制为视图添加一个 tag, 这样做的初衷是方便定位, 此外如果你需要做一些用户行为统计及类似的功能, 你或许会更感谢这种做法.
目前, UIView+ZZFLEX 已添加链式 API 的控件有:
UIView, UIImageView, UILabel, UIControl, UITextField, UIButton, UISwitch, UIScrollView, UITextView, UITableView, UICollectionView
2.2,ZZFlexibleLayoutViewController
ZZFlexibleLayoutViewController 是一个基于 collectionView 实现的数据驱动的列表页框架, 可大幅降低复杂列表界面实现和维护的难度.
容器层
使用它, 我们几乎无需关心和实现 collectionView 的各种代理方法. 它的设计使得列表页的构建就如同拼图一般, 只需要一件件的 add 需要的模块, 我们想要的界面就绘制出来了. 因此, 使用它实现的页面极具拓展性和维护性:
demo3.PNG
在 ZZFlexibleLayoutViewController 中, 我们不在使用 sectionIndex/indexPath 确定 section/cell 的位置, 转而使用更唯一的 sectionTag/viewTag 代替. 因为前者本质上是一个很不确定的数据, 它会随着界面的变化而发生改变, 很多与 tableView/collectionView 相关的崩溃也都与此有关.
元素层
和之前不同的是, 所有添加到 ZZFlexibleLayoutViewController 中的 cell,header,footer 需要额外实现一个协议 - ZZFlexibleLayoutViewProtocol:
viewProtocol.PNG
cell/view 实现这个协议的目的和好处有两个:
1, 框架层得以统一处理 collectionView 与 cell/header/footer 的交互;
2, 方便进行整体的性能优化, 如缓存 view/header/footter 计算大小的方法的数据.
目前主要支持的功能:
添加 | 插入 | 获取 | 批量添加 | 批量插入 | 批量获取 | 编辑 | 删除 | 清空子数据 | 更新高度 | |
---|---|---|---|---|---|---|---|---|---|---|
section | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |||
cell | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ||
header/footer | ✔️ | ✔️ | ✔️ | ✔️ |
最新版 ZZFLEX 已提供 cell 无需实现 viewProtocol 的方案, 详见 GitHub.
2.3,ZZFLEXAngel
ZZFlexibleLayoutViewController 为列表页的开发带来的优异的拓展性和可维护性, 但它是一个 VC 级别的实现, 在一些业务场景下还是不够灵活的.
ZZFLEXAngel 是 ZZFlexibleLayoutViewController 核心思想和设计提炼而成的一个 "列表控制中心", 它与页面和列表控件是完全解耦的.
使用它, 我们只需通过任意 collectionView 或 tableView 来初始化一个 ZZFLEXAngel 实例 (本质是将列表页的 dataSource 和 delegate 指向 ZZFLEXAngel 或其子类的实例), 然后就可以通过这个实例, 和 ZZFlexibleLayoutViewController 中一样, 使用那些好用的 API 了.
demo5.PNG
2.4,ZZFLEXRequestQueue
一些复杂的页面中会存在多个异步数据请求 (net,db 等), 然而同时发起的异步请求, 其结果的返回顺序是不确定的, 这样会导致 UI 展示顺序的不确定性, 很多情况下这是我们不希望看到的.
ZZFLEXRequestQueue 的核心思想是 "将一次数据请求的过程封装成对象", 它可以保证在此业务场景下, 按队列顺序加载展示 UI.
详见 Demo.
三, 使用 ZZUIHelpler 自动生成代码
ZZUIHelpler 已支持自动生成 ZZFLEX 代码, 点点点即可~
ZZUIHelper.PNG
详见 https://github.com/tbl00c/ZZUIHelper
来源: http://www.jianshu.com/p/11c1354851d5