超棒文集

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

2017-04-02  本文已影响658人  逍遥晨旭

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;
上一篇下一篇

猜你喜欢

热点阅读