导库
pod 'SVProgressHUD'
-
SVProgressHUD 都有什么特点呢?
提示当前的状态,如:网络传输、提交中、操作成功或失败等;
可设置提示的 pop layer 是否为 model,提示的时候是否允许用户做其他操作;
可以设置背景色和自定义提示的内容;
iOS 提示信息使用比较广泛的有 SVProgressHUD 和 MBProgressHUB 两种,MBProgressHUD比较全面,但是SVProgressHUD比较轻量级,使用起来非常简洁,代码量非常少。
使用:
因为都是类方法,引入头文件#import "SVProgressHUD.h"
,直接在控制器用类名引用就好,很方便
1. 经常使用的提示框方法:
+ (void)showSuccessWithStatus:(nullable NSString*)status;
+ (void)showErrorWithStatus:(nullable NSString*)status;
+ (void)showWithStatus:(nullable NSString*)status;
//也是加载中的提示框,不过没有文字
+ (void)show;
+ (void)showInfoWithStatus:(nullable NSString*)status;
+ (void)showProgress:(float)progress;
// 如果要在下方显示文字,可以用这个方法
+ (void)showProgress:(float)progress status:(nullable NSString*)status;
// 这个方法可以修改提示框上面的图标可以调用这个方法
+ (void)showImage:(UIImage*)image status:(NSString*)status
/* 这个方法还有一种用法就是提示纯文字,因为SVProgressHUD不支持直接提示纯文字,但可以通过调用这个方法来实现提示纯文字,就是不传image就行了,
因为参数image没有__nonNull修饰,所以不能直接传nil,会报警告,虽然不报错。我们可以传一张空图片进去,写法如下*/
[SVProgressHUD showImage:[UIImage imageNamed:@""] status:@"提示纯文字"];
2.1 设置提示框背景和文字
/*
SVProgressHUDStyleLight, // 白色半透明背景,字体黑色
SVProgressHUDStyleDark, // 黑色背景,字体白色
SVProgressHUDStyleCustom // 白色背景,字体黑色
*/
//设置HUD的Style
[SVProgressHUD setDefaultStyle:SVProgressHUDStyleDark];
//设置HUD和文本的颜色
[SVProgressHUD setForegroundColor:[UIColor greenColor]];
//设置HUD背景颜色
[SVProgressHUD setBackgroundColor:[UIColor magentaColor]];
//设置提示框的边角弯曲半径
[SVProgressHUD setCornerRadius:5];
以前HUD背景图层的样式可在提示框方法里面把参数穿进去,现在不行了
2.2 设置HUD背景图层的样式
/**
* SVProgressHUDMaskTypeNone:默认图层样式,当HUD显示的时候,允许用户交互。
*
* SVProgressHUDMaskTypeClear:当HUD显示的时候,不允许用户交互。
*
* SVProgressHUDMaskTypeBlack:当HUD显示的时候,不允许用户交互,且显示黑色背景图层。
*
* SVProgressHUDMaskTypeGradient:当HUD显示的时候,不允许用户交互,且显示渐变的背景图层。
*
* SVProgressHUDMaskTypeCustom:当HUD显示的时候,不允许用户交互,且显示背景图层自定义的颜色。
*/
[SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeCustom];
所谓背景图层样式就是,出现提示框,提示框外的背景的样式,比如背景红色调用SVProgressHUDMaskTypeGradient这个样式,就是这样的
PS:显示提示框的时候,一般不允许用户交互,就是做其他操作,如点击其他按钮,因为默认就是允许交互,所以这个一定要设置下
2.3 设置加载中提示框的加载动画
/*
SVProgressHUDAnimationTypeFlat, // 默认动画类型,自定义平面动画
SVProgressHUDAnimationTypeNative // iOS native UIActivityIndicatorView
*/
//动画效果
[SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeFlat];
3. 隐藏提示框的方法
//设置多少秒后隐藏
[SVProgressHUD dismissWithDelay:60.0];
//这个相当于
[self performSelector:@selector(dismiss) withObject:nil afterDelay:60];
- (void)dismiss{
//这个是直接隐藏
[SVProgressHUD dismiss];
}
4. 简单的封装
你在展示提示框设置了样式,在其他地方使用其他提示框即使不设置也是之前那个样式不是默认的样式,如果是在ViewController里面直接用self调用就行了,当然前提是导入文件。主要有四个方法,第一个是加载中,第二个是纯文字,第三个是失败,第四个是成功提示,三四可以在block里面编写在提示后要进行的操作,如跳转什么的,详细看demo
- UIViewController+LYToast.h
#import <UIKit/UIKit.h>
#import "SVProgressHUD.h"
NS_ASSUME_NONNULL_BEGIN
typedef void(^__nullable completeAction)(void);
@interface UIViewController (LYToast)
/*
隐藏hud
*/
- (void)hideLoadingHUD;
/*
加载中+文字提示(文字可为空)
*/
- (void)showLoadingHUDWithMessage:(nullable NSString *)message;
/*
纯文字提示
*/
- (void)showTextHUDWithMessage:(nonnull NSString *)message;
/*
失败提示
*/
- (void)showWarningHUDWithMessage:(nullable NSString *)message completion:(completeAction)completion;
/*
完成提示
*/
- (void)showCompletionHUDWithMessage:(nullable NSString *)message completion:(completeAction)completion;
@end
NS_ASSUME_NONNULL_END
- UIViewController+LYToast.m
#import "UIViewController+LYToast.h"
@implementation UIViewController (LYToast)
- (void)hideLoadingHUD
{
[SVProgressHUD dismiss];
}
- (void)showLoadingHUDWithMessage:(NSString *)message
{
// 如果当前视图还有其他提示框,就dismiss
[self hideLoadingHUD];
[SVProgressHUD setDefaultStyle:SVProgressHUDStyleDark];
[SVProgressHUD setCornerRadius:5];
[SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeNative];
// 加载中的提示框一般不要不自动dismiss,比如在网络请求,要在网络请求成功后调用 hideLoadingHUD 方法即可
if (message) {
[SVProgressHUD showWithStatus:message];
}else{
[SVProgressHUD show];
}
}
- (void)showTextHUDWithMessage:(NSString *)message
{
[self hideLoadingHUD];
[SVProgressHUD setDefaultStyle:SVProgressHUDStyleDark];
[SVProgressHUD setCornerRadius:5];
[SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeNative];
[SVProgressHUD showImage:[UIImage imageNamed:@""] status:message];
[SVProgressHUD dismissWithDelay:2];
}
- (void)showCompletionHUDWithMessage:(NSString *)message completion:(completeAction)completion
{
[self hideLoadingHUD];
[SVProgressHUD setDefaultStyle:SVProgressHUDStyleDark];
[SVProgressHUD setCornerRadius:5];
[SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeNative];
[SVProgressHUD showSuccessWithStatus:message];
[SVProgressHUD dismissWithDelay:2];
if (completion) {
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^{
completion();
});
}
}
- (void)showWarningHUDWithMessage:(NSString *)message completion:(completeAction)completion
{
[self hideLoadingHUD];
[SVProgressHUD setDefaultStyle:SVProgressHUDStyleDark];
[SVProgressHUD setCornerRadius:5];
[SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeNative];
[SVProgressHUD showErrorWithStatus:message];
[SVProgressHUD dismissWithDelay:2];
if (completion) {
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^{
completion();
});
}
}