iOS 读MBProgressHUD(1.0.0版)的源码(一)

MBProgressHUD的源码
MBProgressHUD是一个非常受欢迎的第三方库,其用法简单,代码朴实易懂,涉及的知识点广而不深奥,是非常适合初学者阅读的一份源码。本篇内容只是介绍MBProgressHUD的相关属性、方法,以便灵活使用MBProgressHUD。

一、MBProgressHUD.h文件属性解析

1)、MBProgressHUD最大偏移量:MBProgressMaxOffset

// HUD的最大偏移量。设置offset时可用到
extern CGFloat const MBProgressMaxOffset;

2)、模式:MBProgressHUDMode

typedef NS_ENUM(NSInteger, MBProgressHUDMode) {
    // 默认模式:显示菊花,菊花不停地,但没有进度
    MBProgressHUDModeIndeterminate,
    // 圆形饼图来作为进度视图
    MBProgressHUDModeDeterminate,
    // 水平进度条
    MBProgressHUDModeDeterminateHorizontalBar,
    //  圆环作为进度条
    MBProgressHUDModeAnnularDeterminate,
    //  自定义视图,提示图
    MBProgressHUDModeCustomView,
    // 只显示文字
    MBProgressHUDModeText
};

3)、动画形式:MBProgressHUDAnimation

typedef NS_ENUM(NSInteger, MBProgressHUDAnimation) {
    // 默认效果:透明度变化的动画
    MBProgressHUDAnimationFade,
    // 相当于MBProgressHUDAnimationZoomIn
    MBProgressHUDAnimationZoom,
    // 放大消失的效果
    MBProgressHUDAnimationZoomOut,
    // 缩小消失的效果
    MBProgressHUDAnimationZoomIn
};

4)、背景颜色:MBProgressHUDBackgroundStyle

typedef NS_ENUM(NSInteger, MBProgressHUDBackgroundStyle) {
    // 默认背景颜色:透明的
    MBProgressHUDBackgroundStyleSolidColor,
    // MBProgressHUD的背景颜色,若没有设置就是透明色,否则就是设置的颜色。
    MBProgressHUDBackgroundStyleBlur
};

5)、MBProgressHUD显示完成的回调

  typedef void (^MBProgressHUDCompletionBlock)();

6)、两个宏:NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END

define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin")

define NS_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end")

一、在这两个宏之间的代码,所有简单指针都被假定设为非空(nonnull),因此我们只需要去指定那些可为空的(nullable)的指针,这样不用麻烦的去将每个属性或方法都去指定nonnull和nullable,减轻了开发的工作量。
二、为了安全起见,苹果还制定了几条规则:
1.typedef定义的类型的nullability(typeof(COREVIDEO_DECLARE_NULLABILITY))特性通常依赖于上下文,即使是在Nonnull组成的这两个宏定义区域设置中,也不能假定它为nonnull。
2.复杂的指针类型(如id *)必须显示去指定是nonnull还是nullable。例如,指定一个指向nullable对象的nonnull指针,可以使用”__nullable id * __nonnull”。
3.我们经常使用的NSError **通常是被假定为一个指向可为空的nullable NSError对象的nullable指针。

7)、MBProgressHUD的类方法和对象方法

/**
 * @return:返回一个HUD,与类方法hideHUDForView:animated:对应
 * @param:view   HUD要显示的view
 * @param:animated   是否要动画
 */
+ (instancetype)showHUDAddedTo:(UIView *)view animated:(BOOL)animated;

/**
 * @return 返回YES,发现一个HUD并将它移出。否则,什么也不做。
 *  @param:view   显示HUD的view
 * @param:animated   是否要动画
 */
+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated;

/**
 * @return:返回一个HUD,遍历view的子控件,返回最上面的那个HUD
 *  @param:view   被遍历的view
 */
+ (nullable MBProgressHUD *)HUDForView:(UIView *)view;

/**
 *  @param:view传入的视图对象仅仅做为定义MBProgressHUD视图frame属性的参照
 */
- (instancetype)initWithView:(UIView *)view;

//  是否动画显示HUD
- (void)showAnimated:(BOOL)animated;

// 是否动画隐藏HUD
- (void)hideAnimated:(BOOL)animated;

// 延迟几秒隐藏HUD,与上面不同的是:若只是提示用户直接用这个方法就比较好
- (void)hideAnimated:(BOOL)animated afterDelay:(NSTimeInterval)delay;

8)、MBProgressHUD的属性

//代理
@property (weak, nonatomic) id<MBProgressHUDDelegate> delegate;

// HUD隐藏后的回调
@property (copy, nullable) MBProgressHUDCompletionBlock completionBlock;

/*
 *  作用:防止HUD显示非常短的任务。如果任务非常短就完成了,HUD一闪而过,多不友好。
 * 这时设置这个graceTime就可以防止HUD显示非常短(就不显示了)。也就是说
 * 如果graceTime时间没有走 完而任务完成了,这时就不显示HUD。graceTime默认值为0.
 */
@property (assign, nonatomic) NSTimeInterval graceTime;

/**
 *  最短显示时间,避免HUD刚显示就隐藏的情况,与graceTime有点像,都是避免HUD显示非常短
 */
@property (assign, nonatomic) NSTimeInterval minShowTime;

//  HUD隐藏的时候,是否从Super上移出。默认是NO。
@property (assign, nonatomic) BOOL removeFromSuperViewOnHide;

// HUD的形式,mode值是上面模式的值
@property (assign, nonatomic) MBProgressHUDMode mode;

// 设置HUD的子控件的颜色,label和进度模式都是contentColor
@property (strong, nonatomic, nullable) UIColor *contentColor UI_APPEARANCE_SELECTOR;

// HUD显示与隐藏的动画形式
@property (assign, nonatomic) MBProgressHUDAnimation animationType UI_APPEARANCE_SELECTOR;

//  HUD默认是显示在super控件的中央,offset就是HUD相对于super控件中央的偏移量
@property (assign, nonatomic) CGPoint offset UI_APPEARANCE_SELECTOR;

//  margin是HUD的子控件到HUD的边距(最小边距),默认是20.f。
@property (assign, nonatomic) CGFloat margin UI_APPEARANCE_SELECTOR;

// 背景框的大小。默认值为CGSizeZero,
@property (assign, nonatomic) CGSize minSize UI_APPEARANCE_SELECTOR;

// 是否强制背景框宽高相等
@property (assign, nonatomic, getter = isSquare) BOOL square UI_APPEARANCE_SELECTOR;

// 这个属性没用过,也没试出来。
@property (assign, nonatomic, getter=areDefaultMotionEffectsEnabled) BOOL defaultMotionEffectsEnabled UI_APPEARANCE_SELECTOR;

// 进度条的进度(从0.0到1.0变化)
@property (assign, nonatomic) float progress;

// 任务进度管理对象
@property (strong, nonatomic, nullable) NSProgress *progressObject;

//  MBBackgroundView的对象只可读
@property (strong, nonatomic, readonly) MBBackgroundView *bezelView;

//  MBBackgroundView的对象只可读
@property (strong, nonatomic, readonly) MBBackgroundView *backgroundView;

//MBProgressHUDModeCustomView模式下实现自定义view
@property (strong, nonatomic, nullable) UIView *customView;

// 短消息提示label,自动调整大小,只可读。
@property (strong, nonatomic, readonly) UILabel *label;

// 与上面的简短提示来说,这次提示就比较详细了,也是只可读
@property (strong, nonatomic, readonly) UILabel *detailsLabel;

//单个任务是,耗时比较长时,可以设置一个取消按钮,取消此次任务。
@property (strong, nonatomic, readonly) UIButton *button;

9)、MBProgressHUD的代理MBProgressHUDDelegate

只有一个用于HUD隐藏时的回调方法:跟属性中completionBlock属性的block回调一样。
- (void)hudWasHidden:(MBProgressHUD *)hud;

二、MBBackgroundView背景视图

 //HUD的背景样式(透明或HUD的背景颜色)
@property (nonatomic) MBProgressHUDBackgroundStyle style;

  //设置HUD的背景颜色
@property (nonatomic, strong) UIColor *color;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容