腾讯开源的框架 QMUI_iOS
很多不错的封装,可以学习下里面的代码
QMUI 团队
QM应该是QQMail的意思吧
分为有3大块:Web、iOS、Android
QMUI Web
作为一个框架,QMUI Web 主要提供了四种能力来提升 UI 开发的效率与质量。分别用于快速实现项目 UI,快速解决重复劳动力工作,CSS 的预处理和复杂的组件参考四个方面,这也是 QMUI Web 的使用目标。
不知道干嘛的,暂时不管了
QMUI_iOS
demo
官方demo: QMUIDemo_iOS
换肤
QDThemeManager 发通知,基类 QDCommonViewController 及 QDCommonTableViewController 接收并处理通知,收到后转到一个自定义的协议方法,子类实现刷新 UI,比如 QDCommonGridButton 按钮修改 tintColor 并刷新,没什么特殊的。包括按钮刷新tintColor在内,这是demo提供的功能,QMUI_iOS并没有提供
QMUICommonViewController
作为项目内所有 UIViewController
的基类,封装了一些常用的操作,没有什么特殊的,注释写的好,有summary、discussion、note、see等
QMUICommonTableViewController
有用一些宏
- (instancetype)initWithStyle:(UITableViewStyle)style NS_DESIGNATED_INITIALIZER;
- (void)didInitializeWithStyle:(UITableViewStyle)style NS_REQUIRES_SUPER;
QMUIButton
支持按钮内图片和文字的各种位置和间距
实现是重写 layoutSubviews 方法,计算 image 和 text 的 frame,最后设置给 imageView 和 Label
支持 IB ?
重写了 sizeThatFits 和 intrinsicContentSize
QMUILinkButton
支持下划线
实现是添加一个 CALayer,设置 layer 的 frame 和 background
QMUIGhostButton、QMUIFillButton
“幽灵”按钮,也即背景透明、带圆角边框的按钮
其中,圆角是在 layoutSublayersOfLayer 方法内实现的,为什么放到这里,是为了在iOS11以下,实现自定义圆角(某几个角为圆角),而在 UIView (QMUI_CornerRadius) swizzle 了这个方法 layoutSublayersOfLayer,
QMUINavigationButton
抹平各版本iOS系统的样式差异,不过我们的项目是直接用 customView 实现的,更简单
QMUIToolbarButton
并无特别,只是做了统一的字体等配置而已
QMUILabel
UINavigationController+NavigationBarTransition
/**
* 因为系统的UINavigationController只有一个navBar,所以会导致在切换controller的时候,如果两个controller的navBar状态不一致(包括backgroundImgae、shadowImage、barTintColor等等),就会导致在刚要切换的瞬间,navBar的状态都立马变成下一个controller所设置的样式了,为了解决这种情况,QMUI给出了一个方案,有四个方法可以决定你在转场的时候要不要使用自定义的navBar来模仿真实的navBar。
*/
一样是使用假的UINavigationBar实现的