IOS MBProgressHUD第三方库的封装

IOS 对MBProgressHUD第三方库的再封装

MBProgressHUD作为iOS项目常用的一个组件(俗称菊花),用于显示过渡效果的,比如网络请求之前显示loading,网络结束时隐藏loading,tableView的刷新效果等。平时我们使用它的时候,总是会在每一个界面上都去调用它,代码显得很复杂让人看着也恶心。所以我会想到对它的使用进行再次封装,这样更能方便使用。

  • 新的类继承自MBProgressHUD
  • loading的样式可以在子类里面进行修改
  • 对loading进行超时处理
  • 定义类方法去调用,调用时更为简单
  • 用static去初始化对象

再次封装

IOS MBProgressHUD第三方库的封装_第1张图片
新建一个类,继承自MBProgressHUD

“MBLoadHUD.h”

IOS MBProgressHUD第三方库的封装_第2张图片
#import “MBProgressHUD.h”

@interface MBLoadHUD : MBProgressHUD

@property (nonatomic,assign) BOOL ifEnd;
- (void)stop;
- (void)start;
+ (MBLoadHUD *)getInitWithMB;

@end

留出接口给外界调用,一个判断是否超时的BOOL,开始loading的方法和结束loading的方法,一个便利初始化的方法。

“MBLoadHUD.m”

IOS MBProgressHUD第三方库的封装_第3张图片
#import “MBLoadHUD.h”
@implementation MBLoadHUD
static MBLoadHUD *mbLoad = nil;
- (void)start {
self.ifEnd = NO;
[self performSelector:@selector(NetworkingErrorStop) withObject:nil afterDelay:8];
[[UIApplication sharedApplication].keyWindow addSubview:self];
[self showAnimated:YES];
}
- (void)stop {
self.ifEnd = YES;
[self hideAnimated:YES];
[self removeFromSuperview];
}
+ (MBLoadHUD *)getInitWithMB {
if (!mbLoad) {
mbLoad = [[MBLoadHUD alloc] initWithView:[UIApplication sharedApplication].keyWindow];
mbLoad.bezelView.color = [UIColor blackColor];
mbLoad.contentColor = [UIColor whiteColor];
}
mbLoad.ifEnd = YES;
return mbLoad;
}

 static定义一个对象,这样只会被初始化一次。然后类方法进行初始化,并放在window上,再对这个对象进行相关配置。我用的黑色底加白色圈(系统默认的是灰色底白色圈),其它配置自己进行相关的属性设置。
 用perform对它进行超时处理,一般网络请求超时时间为8秒,所以这里也设置的8秒。当然,如果有需要的可以让它随时改变。这是当网络请求时,网速慢或者出问题的时候,给它一个默认的超时时间,到时了就不会再loading了。
 开始loading和结束loading,将超时判断置为相应的状态。并调用父类的开始和结束动画。

IOS MBProgressHUD第三方库的封装_第4张图片
//网络错误
- (void)NetworkingErrorStop {
if (!self.ifEnd) {
[self hideAnimated:YES];
[self removeFromSuperview];
}
当网络超时,停止动画并移除。

实际调用

导入相应的类
#import “MBLoadHUD.h”

//开始loading
[[MBLoadHUD getInitWithMB] start];
/**
网络请求
tableView刷新等等
*/
//结束loading
[[MBLoadHUD getInitWithMB] stop];

这种封装之后的MBProgressHUD用起来更加顺手,想在哪里开始或者想在哪里停都可以随心所欲,开始结束只需要两句代码。是不是感觉很方便呢?

你可能感兴趣的:(IOS MBProgressHUD第三方库的封装)