MBProgressHUD是一个显示HUD窗口的第三方类库,用于在执行一些后台任务时,在程序中显示一个表示进度的loading视图和两个可选的文本提示的HUD窗口。MBProgressHUD 二次封装网上有很多教程,大多数我们在 MVC 模式下发送网络大多都在 UIVIewCOntroller 进行,需要使用弹窗的地方大多也都在controller 中,所有之前给 UIViewCOntroller 写了个分类,方便调用,但是后来觉得在基类中使用不太好,所以今天重新整理一下. demo 地址:https://github.com/SummerHH/YJMBProgressHUD.git

先了解下 MBProgressHUD 使用:

HUD窗口的模式:

// 使用UIActivityIndicatorView来显示进度,这是默认值
MBProgressHUDModeIndeterminate,
// 使用一个圆形饼图来作为进度视图
MBProgressHUDModeDeterminate,
// 使用一个水平进度条
MBProgressHUDModeDeterminateHorizontalBar,
// 使用圆环作为进度条
MBProgressHUDModeAnnularDeterminate,
// 显示一个自定义视图,通过这种方式,可以显示一个正确或错误的提示图
MBProgressHUDModeCustomView,
// 只显示文本
MBProgressHUDModeText

一个MBProgressHUD视图主要由四个部分组成:

1.标题文本

@property (strong, nonatomic, readonly) UILabel *label;

2.详情文本

@property (strong, nonatomic, readonly) UILabel *detailsLabel;

3.loading动画视图

@property (strong, nonatomic, nullable) UIView *customView;

4.HUD背景框

@property (strong, nonatomic, readonly) MBBackgroundView *bezelView;

外观属性:

设置颜色 默认为半半透明的黑色和白色的iOS 7和早iOS版本

@property (strong, nonatomic, nullable) UIColor *contentColor UI_APPEARANCE_SELECTOR;

//设置显示大小

@property (assign, nonatomic) CGSize minSize UI_APPEARANCE_SELECTOR;

//隐藏后从父视图中移除

@property (assign, nonatomic) BOOL removeFromSuperViewOnHide;

//是否显示蒙版,不过1.0.0版本被弃用了
@property (assign) BOOL dimBackground;

- (void)drawRect:(CGRect)rect {

    ...

    if (self.dimBackground) {

        //Gradient colours

        size_t gradLocationsNum = ;

        CGFloat gradLocations[] = {0.0f, 1.0f};

        CGFloat gradColors[] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.75f}; 

        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

        CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradColors, gradLocations, gradLocationsNum);

        CGColorSpaceRelease(colorSpace);

        //Gradient center

        CGPoint gradCenter= CGPointMake(self.bounds.size.width/, self.bounds.size.height/);

        //Gradient radius

        float gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ;

        // 由中心向四周绘制渐变

        CGContextDrawRadialGradient (context, gradient, gradCenter,

                                     , gradCenter, gradRadius,

                                     kCGGradientDrawsAfterEndLocation);

        CGGradientRelease(gradient);

    }

    ... 

}

//创建布局

- (id)initWithView:(UIView *)view;

控制布局的属性

// HUD相对于父视图中心点的x轴偏移量和y轴偏移量

@property (assign) float xOffset;

@property (assign) float yOffset;

// HUD各元素与HUD边缘的间距

@property (assign) float margin;

// HUD背景框的最小大小

@property (assign) CGSize minSize;

// HUD的实际大小

@property (atomic, assign, readonly) CGSize size;

// 是否强制HUD背景框宽高相等

@property (assign, getter = isSquare) BOOL square;

//显示和隐藏的方法

- (void)showAnimated:(BOOL)animated;
- (void)hideAnimated:(BOOL)animated;

经常在 UIViewController 中使用,可以给 UIVIewController 写个分类

使用简单方便

#import <UIKit/UIKit.h>
#import "MBProgressHUD.h"
@interface UIViewController (HUD)
-(void)showSuccess:(NSString *)success;
-(void)showError:(NSString *)error;
-(void)showMessage:(NSString *)message;
-(void)showWaiting;
-(void)showLoading;
-(void)showLoadingWithMessage:(NSString *)message;
-(void)showSaving;
-(void)hideHUD;
@end
@implementation UIViewController (HUD)
-(void)showSuccess:(NSString *)success
{
MBProgressHUD *HUD=[[MBProgressHUD alloc]initWithView:[self getView]];
HUD.contentColor=[UIColor whiteColor];
HUD.bezelView.color=[UIColor blackColor];
HUD.mode=MBProgressHUDModeText;
HUD.label.text=success;
HUD.removeFromSuperViewOnHide=YES;
[[self getView] addSubview:HUD];
[HUD showAnimated:YES];
[HUD hideAnimated:YES afterDelay:];
}
-(void)showError:(NSString *)error
{
MBProgressHUD *HUD=[[MBProgressHUD alloc]initWithView:[self getView]];
HUD.contentColor=[UIColor whiteColor];
HUD.bezelView.color=[UIColor blackColor];
HUD.mode=MBProgressHUDModeText;
HUD.label.text=error;
HUD.removeFromSuperViewOnHide=YES;
[[self getView] addSubview:HUD];
[HUD showAnimated:YES];
[HUD hideAnimated:YES afterDelay:];
}
-(void)showMessage:(NSString *)message
{
MBProgressHUD *HUD=[[MBProgressHUD alloc]initWithView:[self getView]];
HUD.contentColor=[UIColor whiteColor];
HUD.bezelView.color=[UIColor blackColor];
HUD.mode=MBProgressHUDModeText;
HUD.label.text=message;
HUD.removeFromSuperViewOnHide=YES;
[[self getView] addSubview:HUD];
[HUD showAnimated:YES];
[HUD hideAnimated:YES afterDelay:];
}
-(void)showWaiting
{
MBProgressHUD *HUD=[[MBProgressHUD alloc]initWithView:[self getView]];
HUD.backgroundView.color = [UIColor colorWithWhite:.f alpha:.2f];
HUD.bezelView.color = [UIColor blackColor];
HUD.contentColor=[UIColor whiteColor];
HUD.removeFromSuperViewOnHide=YES;
[[self getView] addSubview:HUD];
[HUD showAnimated:YES];
}
-(void)showLoading
{
MBProgressHUD *HUD=[[MBProgressHUD alloc]initWithView:[self getView]];
HUD.backgroundView.color = [UIColor colorWithWhite:.f alpha:.2f];
HUD.bezelView.color = [UIColor blackColor];
HUD.contentColor=[UIColor whiteColor];
HUD.label.text=@"正在加载";
HUD.removeFromSuperViewOnHide=YES;
[[self getView] addSubview:HUD];
[HUD showAnimated:YES];
}
-(void)showLoadingWithMessage:(NSString *)message
{
MBProgressHUD *HUD=[[MBProgressHUD alloc]initWithView:[self getView]];
HUD.backgroundView.color = [UIColor colorWithWhite:.f alpha:.2f];
HUD.bezelView.color = [UIColor blackColor];
HUD.contentColor=[UIColor whiteColor];
HUD.label.text=message;
HUD.removeFromSuperViewOnHide=YES;
[[self getView] addSubview:HUD];
[HUD showAnimated:YES];
}
-(void)showSaving
{
MBProgressHUD *HUD=[[MBProgressHUD alloc]initWithView:[self getView]];
HUD.backgroundView.color = [UIColor colorWithWhite:.f alpha:.2f];
HUD.bezelView.color = [UIColor blackColor];
HUD.contentColor=[UIColor whiteColor];
HUD.label.text=@"正在保存";
HUD.removeFromSuperViewOnHide=YES;
[[self getView] addSubview:HUD];
[HUD showAnimated:YES];
}
-(void)hideHUD
{
[MBProgressHUD hideHUDForView:[self getView] animated:YES];
}
-(UIView *)getView
{
UIView *view;
if (self.navigationController.view) {
view=self.navigationController.view;
}else
{
view=self.view;
}
return view;
}

另一种可以配合网络使用,也可以 用在 Controller中

#import <MBProgressHUD/MBProgressHUD.h>

typedef NS_ENUM(NSInteger, YJProgressHUDStatus) {

    /** 成功 */
YJProgressHUDStatusSuccess, /** 失败 */
YJProgressHUDStatusError, /** 警告*/
YJProgressHUDStatusWaitting, /** 提示 */
YJProgressHUDStatusInfo, /** 等待 */
YJProgressHUDStatusLoading }; @interface YJProgressHUD : MBProgressHUD /**
* 是否正在显示
*/
@property (nonatomic, assign, getter=isShowNow) BOOL showNow; /** 返回一个 HUD 的单例 */
+ (instancetype)sharedHUD; /** 在 window 上添加一个 HUD */
+ (void)showStatus:(YJProgressHUDStatus)status text:(NSString *)text; #pragma mark - 建议使用的方法 /** 在 window 上添加一个只显示文字的 HUD */
+ (void)showMessage:(NSString *)text; /** 在 window 上添加一个提示`信息`的 HUD */
+ (void)showWaiting:(NSString *)text; /** 在 window 上添加一个提示`失败`的 HUD */
+ (void)showError:(NSString *)text; /** 在 window 上添加一个提示`成功`的 HUD */
+ (void)showSuccess:(NSString *)text; /** 在 window 上添加一个提示`等待`的 HUD, 需要手动关闭 */
+ (void)showLoading:(NSString *)text; /** 手动隐藏 HUD */
+ (void)hideHUD;
#import "YJProgressHUD.h"

// 背景视图的宽度/高度
#define BGVIEW_WIDTH 100.0f
// 文字大小
#define TEXT_SIZE 16.0f @implementation YJProgressHUD + (instancetype)sharedHUD {
static id hud;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
hud = [[self alloc] initWithView:[UIApplication sharedApplication].keyWindow];
});
return hud;
} + (void)showStatus:(YJProgressHUDStatus)status text:(NSString *)text { YJProgressHUD *HUD = [YJProgressHUD sharedHUD];
HUD.bezelView.color = [UIColor colorWithHex:0x000000];
HUD.contentColor=[UIColor whiteColor];
[HUD showAnimated:YES];
[HUD setShowNow:YES];
//蒙版显示 YES , NO 不显示
// HUD.dimBackground = YES;
HUD.label.text = text;
HUD.label.textColor = [UIColor whiteColor];
[HUD setRemoveFromSuperViewOnHide:YES];
HUD.label.font = [UIFont boldSystemFontOfSize:TEXT_SIZE];
[HUD setMinSize:CGSizeMake(BGVIEW_WIDTH, BGVIEW_WIDTH)];
[[UIApplication sharedApplication].keyWindow addSubview:HUD]; NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"YJProgressHUD" ofType:@"bundle"]; switch (status) { case YJProgressHUDStatusSuccess: { NSString *sucPath = [bundlePath stringByAppendingPathComponent:@"MBHUD_Success.png"];
UIImage *sucImage = [UIImage imageWithContentsOfFile:sucPath]; HUD.mode = MBProgressHUDModeCustomView;
UIImageView *sucView = [[UIImageView alloc] initWithImage:sucImage];
HUD.customView = sucView;
[HUD hideAnimated:YES afterDelay:2.0f]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[HUD setShowNow:NO];
});
}
break; case YJProgressHUDStatusError: { NSString *errPath = [bundlePath stringByAppendingPathComponent:@"MBHUD_Error.png"];
UIImage *errImage = [UIImage imageWithContentsOfFile:errPath]; HUD.mode = MBProgressHUDModeCustomView;
UIImageView *errView = [[UIImageView alloc] initWithImage:errImage];
HUD.customView = errView;
[HUD hideAnimated:YES afterDelay:2.0f]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[HUD setShowNow:NO];
});
}
break; case YJProgressHUDStatusLoading: {
HUD.mode = MBProgressHUDModeIndeterminate;
}
break; case YJProgressHUDStatusWaitting: {
NSString *infoPath = [bundlePath stringByAppendingPathComponent:@"MBHUD_Warn.png"];
UIImage *infoImage = [UIImage imageWithContentsOfFile:infoPath]; HUD.mode = MBProgressHUDModeCustomView;
UIImageView *infoView = [[UIImageView alloc] initWithImage:infoImage];
HUD.customView = infoView;
[HUD hideAnimated:YES afterDelay:2.0f]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[HUD setShowNow:NO];
}); }
break; case YJProgressHUDStatusInfo: { NSString *infoPath = [bundlePath stringByAppendingPathComponent:@"MBHUD_Info.png"];
UIImage *infoImage = [UIImage imageWithContentsOfFile:infoPath]; HUD.mode = MBProgressHUDModeCustomView;
UIImageView *infoView = [[UIImageView alloc] initWithImage:infoImage];
HUD.customView = infoView;
[HUD hideAnimated:YES afterDelay:2.0f]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[HUD setShowNow:NO];
});
}
break; default:
break;
}
} + (void)showMessage:(NSString *)text { YJProgressHUD *HUD = [YJProgressHUD sharedHUD];
HUD.bezelView.color = [UIColor colorWithHex:0x000000];
[HUD showAnimated:YES];
[HUD setShowNow:YES];
HUD.label.text = text;
HUD.contentColor=[UIColor whiteColor];
[HUD setMinSize:CGSizeZero];
[HUD setMode:MBProgressHUDModeText];
// HUD.dimBackground = YES;
[HUD setRemoveFromSuperViewOnHide:YES];
HUD.label.font = [UIFont boldSystemFontOfSize:TEXT_SIZE];
[[UIApplication sharedApplication].keyWindow addSubview:HUD]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[YJProgressHUD sharedHUD] setShowNow:NO];
[[YJProgressHUD sharedHUD] hideAnimated:YES];
});
} + (void)showWaiting:(NSString *)text { [self showStatus:YJProgressHUDStatusWaitting text:text];
} + (void)showError:(NSString *)text { [self showStatus:YJProgressHUDStatusError text:text];
} + (void)showSuccess:(NSString *)text { [self showStatus:YJProgressHUDStatusSuccess text:text];
} + (void)showLoading:(NSString *)text { [self showStatus:YJProgressHUDStatusLoading text:text];
} + (void)hideHUD { [[YJProgressHUD sharedHUD] setShowNow:NO];
[[YJProgressHUD sharedHUD] hideAnimated:YES];
}

效果图:

ios MBProgressHUD 使用,及二次封装的更多相关文章

  1. 对MBProgressHUD进行二次封装并精简使用

    对MBProgressHUD进行二次封装并精简使用 https://github.com/jdg/MBProgressHUD 几个效果图: 以下源码是MBProgressHUD支持最新的iOS8的版本 ...

  2. AFNetworking3.0+MBProgressHUD二次封装,一句话搞定网络提示

    对AFNetworking3.0+MBProgressHUD的二次封装,使用更方便,适用性非常强: 一句话搞定网络提示: 再也不用担心网络库更新后,工程要修改很多地方了!网络库更新了只需要更新这个封装 ...

  3. iOS项目相关@AFN&SDWeb的二次封装

    一,AFNetworking跟SDWebImge是功能强大且常用的第三方,然而在实际应用中需要封装用来复用今天就跟大家分享一下AFN&SDWeb的二次封装 1. HttpClient.h及.m ...

  4. iOS菜鸟之AFN的二次封装

    我用一个单例类将一些常用的网络请求进行了二次封装,主要包括post请求 get请求  图片文件上传下载  视频的断点续传等功能. 首先大家先去github上下载AFN,将文件夹内的AFNetworki ...

  5. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  6. AFNetworking二次封装的那些事

    AFNetworking可是iOS网络开发的神器,大大简便了操作.不过网络可是重中之重,不能只会用AFNetworking.我觉得网络开发首先要懂基本的理论,例如tcp/ip,http协议,之后要了解 ...

  7. 本地缓存下载文件,download的二次封装

    来源:http://ask.dcloud.net.cn/article/524 源码下载链接 说明: (1)由于平时项目中大量用到了附件下载等功能,所以就花了一个时间,把plus的downlaod进行 ...

  8. .Net Framework下对Dapper二次封装迁移到.Net Core2.0遇到的问题以及对Dapper的封装介绍

    今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...

  9. 代码二次封装-xUtils(android)

    通常我们会引用很多lib 而且会出现lib 与我们的功能仅仅差一点点 这种情况我们最好不要去改动源代码 而是进行二次封装 举例我使用 xUtils的二次封装 此处说明我是搞ios的 这个是androi ...

随机推荐

  1. ls- 查看文件信息

    通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限),查看目录信息等等,ls 命令在日常的linux操作中用的很多,在此给大家介绍一下ls 命令的使 ...

  2. 树莓派 Learning 001 装机 ---之 1 安装NOOBS系统

    树莓派安装NOOBS系统 (使用的树莓派板卡型号:Raspberry Pi 2 Model B V1.1)(板卡的型号在板子正面的丝印层上印着,你可以看到.) RASPBERRY PI 2 MODEL ...

  3. Centos6.8下yum安装python2.7

    下载 ius-release.rpm包 wget https://centos6.iuscommunity.org/ius-release.rpm 安装ius-release.rpm包 rpm -Uv ...

  4. swiper实现左右滑动图片

    ref:http://www.swiper.com.cn/usage/index.html help:https://segmentfault.com/a/1190000002962202 src: ...

  5. oracle中文乱码解决方法笔记

    我刚刚在linux下安装oracle时就碰到这个问题,查了半天知道问题是oracle的字符集不对. 解决方法是dbca进入图形界面,删去现有的库,重建新库. 建库时注意: 1,dbca创建, 选第一项 ...

  6. Dapper 存储过程、事务等

    接上一篇<Dapper 增删改查> 0.存储过程 create proc p_login ), ), ) output as begin if(exists(select * from U ...

  7. 第一章 –– Java基础语法

    第一章 –– Java基础语法 span::selection, .CodeMirror-line > span > span::selection { background: #d7d4 ...

  8. linux网络基础-网卡bonding技术

    1.bondingbonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,实现本地网卡的冗余,带宽扩容和负载均衡.在应用部署中是 ...

  9. 用vue写一个仿简书的轮播图

    原文地址:用vue写一个仿简书的轮播图 先展示最终效果: Vue的理念是以数据驱动视图,所以拒绝通过改变元素的margin-top来实现滚动效果.写好css样式,只需改变每张图片的class即可实现轮 ...

  10. plpython 中文分词Windows下 PG数据库jieba分词

    windows 下安装版本匹配python-3.4.3.amd64.msipostgresql-10.1-2-windows-x64.exe create language plpython3u;se ...