MBProgressHUD 源码解析
来源:互联网 发布:csmar数据库怎么用 编辑:程序博客网 时间:2024/06/06 09:57
MBProgressHUD 一个整体的流程图
有哪些类,主要作用是什么。
MBProgressHUD 继承自UIView,框架主功能类,负责UI渲染、逻辑处理。
MBRoundProgressView 继承自UIView, 定义了一个圆形的进度条。(一个进度展示UI的实现)
MBBarProgressView 继承自UIView, 定义了一个条形的进度条。(一个进度展示UI的实现)
一些重要的方法说明。
MBProgressHUD 类:
- (void)layoutSubviews : 计算HUD 的 size 信息,计算子控件布局(包括 detailsLabel,label )- (void)drawRect:(CGRect)rect : 根据 HUD 的size信息 将HUD绘制出来
MBRoundProgressView 类:
- (void)drawRect:(CGRect)rect : 绘制一个圆形进度条背景,绘制”进度“的展示。
一些功能的实现解析
1、任务处理的实时进度展示是如何实现的?
在MBProgressHUD中有 indicator 和 progress属性,indicator 属性是 MBProgressHUD 的指示器对象,可能是圆形、条形、自定义等等,默认是 UIActivityIndicatorView。在设置MBProgressHUD实例的progress属性时,会使用indicator对象去设置progress(此时会判断 indicator 是否可以调用)代码如下:
if ([indicator respondsToSelector:@selector(setProgress:)]) {[(id)indicator setValue:@(progress) forKey:@"progress"];}以 indicator 是MBRoundProgressView的实例为例,MBRoundProgressView 也有一个progress属性( indicator 能够响应setProgress:方法),并且监听该属性的变化 ,
监听到progress变化后,则会调用 drawRect: 方法,drawRect: 中根据progress对”进度“进行视图绘制。如果要自定义一个进度展示UI,则只需要自定义类提供一个progress属性,并且根据progress属性的变化实时刷新UI展现即可。
一些设计上的个人理解与看法
1、MBProgressHUD 将初始化、UI与数据的绑定,UI布局,UI绘制良好的区分了开来。MBProgressHUD中有许多属性,其中对部分属性添加了监听(KVO),当某些属性的变化会涉及UI变动时,则调用 UI布局、UI绘制方法,某些属性的变动只是涉及数据变化时则只调用 UI与数据绑定 方法,充分解耦各个模块,逻辑更清晰。
2、MBBarProgressView 的实例对象view是覆盖整个 superView的 (- (id)initWithView:(UIView *)view 中的这个view就是superView) , 其中HUD的部分是通过Quartz2D接口绘制出来的,个人认为这样的好处一方面是提高性能,另一方面是减少业务无关子控件,降低复杂度(如果HUD也用UIKit 接口实现的话,势必会增加该控件的层级结构,从而在布局上更加复杂),同时使用Quartz2D 接口也能使绘制出来的UI更加精细。缺点是如果有复杂的UI需求的话,Quartz2D接口实现起来将会异常复杂,而该控件在一个合理的复杂度范围内,合理使用Quartz2D 接口是再好不过的了。
以上是个人对 MBProgressHUD 的一些理解,仅当抛砖引玉,如有其他看法请不吝回复,大家共探讨,如有出错之处请不吝指出。
- MBProgressHUD 源码解析
- MBProgressHUD解析
- MBProgressHUD 进度条源码
- 源码篇:MBProgressHUD
- MBProgressHUD源码分析
- 源码篇:MBProgressHUD
- 源码笔记---MBProgressHUD
- IOS开发--源码篇 MBProgressHUD
- MBProgressHUD
- MBProgressHUD
- MBProgressHUD
- MBProgressHUD
- MBProgressHUD
- MBProgressHUD
- MBProgressHUD
- MBProgressHUD
- MBProgressHUD
- MBProgressHUD
- hadoop 配置主机的SSH无密钥登陆
- SSH上传文件提示encoutered 2 errors during the transfer
- Responder一点也不神秘————iOS用户响应者链完全剖析
- 01-2. Maximum Subsequence Sum (25)
- A Pangram
- MBProgressHUD 源码解析
- hdu 3911 线段树+区间合并
- nodejs npm 常用命令
- SAP概览(初学者必看)
- Cocos2d-X的UI树(1)
- 写一个简单程序解析ELF
- ubuntu 用户添加 添加sudo权限 组添加 杂乱概述
- struts2 namespace 规律
- asl 语言语法