
導(dǎo)庫(kù)
pod 'SVProgressHUD'
-
SVProgressHUD 都有什么特點(diǎn)呢?
提示當(dāng)前的狀態(tài),如:網(wǎng)絡(luò)傳輸、提交中、操作成功或失敗等;
可設(shè)置提示的 pop layer 是否為 model,提示的時(shí)候是否允許用戶做其他操作;
可以設(shè)置背景色和自定義提示的內(nèi)容;
iOS 提示信息使用比較廣泛的有 SVProgressHUD 和 MBProgressHUB 兩種,MBProgressHUD比較全面,但是SVProgressHUD比較輕量級(jí),使用起來(lái)非常簡(jiǎn)潔,代碼量非常少。
使用:
因?yàn)槎际穷惙椒ǎ腩^文件#import "SVProgressHUD.h",直接在控制器用類名引用就好,很方便
1. 經(jīng)常使用的提示框方法:
+ (void)showSuccessWithStatus:(nullable NSString*)status;

效果圖
+ (void)showErrorWithStatus:(nullable NSString*)status;

效果圖
+ (void)showWithStatus:(nullable NSString*)status;

效果圖
//也是加載中的提示框,不過(guò)沒有文字
+ (void)show;

效果圖
+ (void)showInfoWithStatus:(nullable NSString*)status;

效果圖
+ (void)showProgress:(float)progress;
// 如果要在下方顯示文字,可以用這個(gè)方法
+ (void)showProgress:(float)progress status:(nullable NSString*)status;

顯示進(jìn)度的,圖為0.1的進(jìn)度,滿了為1
// 這個(gè)方法可以修改提示框上面的圖標(biāo)可以調(diào)用這個(gè)方法
+ (void)showImage:(UIImage*)image status:(NSString*)status
/* 這個(gè)方法還有一種用法就是提示純文字,因?yàn)镾VProgressHUD不支持直接提示純文字,但可以通過(guò)調(diào)用這個(gè)方法來(lái)實(shí)現(xiàn)提示純文字,就是不傳image就行了,
因?yàn)閰?shù)image沒有__nonNull修飾,所以不能直接傳nil,會(huì)報(bào)警告,雖然不報(bào)錯(cuò)。我們可以傳一張空?qǐng)D片進(jìn)去,寫法如下*/
[SVProgressHUD showImage:[UIImage imageNamed:@""] status:@"提示純文字"];

提示純文字
2.1 設(shè)置提示框背景和文字
/*
SVProgressHUDStyleLight, // 白色半透明背景,字體黑色
SVProgressHUDStyleDark, // 黑色背景,字體白色
SVProgressHUDStyleCustom // 白色背景,字體黑色
*/
//設(shè)置HUD的Style
[SVProgressHUD setDefaultStyle:SVProgressHUDStyleDark];
//設(shè)置HUD和文本的顏色
[SVProgressHUD setForegroundColor:[UIColor greenColor]];
//設(shè)置HUD背景顏色
[SVProgressHUD setBackgroundColor:[UIColor magentaColor]];
//設(shè)置提示框的邊角彎曲半徑
[SVProgressHUD setCornerRadius:5];
以前HUD背景圖層的樣式可在提示框方法里面把參數(shù)穿進(jìn)去,現(xiàn)在不行了
2.2 設(shè)置HUD背景圖層的樣式
/**
* SVProgressHUDMaskTypeNone:默認(rèn)圖層樣式,當(dāng)HUD顯示的時(shí)候,允許用戶交互。
*
* SVProgressHUDMaskTypeClear:當(dāng)HUD顯示的時(shí)候,不允許用戶交互。
*
* SVProgressHUDMaskTypeBlack:當(dāng)HUD顯示的時(shí)候,不允許用戶交互,且顯示黑色背景圖層。
*
* SVProgressHUDMaskTypeGradient:當(dāng)HUD顯示的時(shí)候,不允許用戶交互,且顯示漸變的背景圖層。
*
* SVProgressHUDMaskTypeCustom:當(dāng)HUD顯示的時(shí)候,不允許用戶交互,且顯示背景圖層自定義的顏色。
*/
[SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeCustom];
所謂背景圖層樣式就是,出現(xiàn)提示框,提示框外的背景的樣式,比如背景紅色調(diào)用SVProgressHUDMaskTypeGradient這個(gè)樣式,就是這樣的
漸變的
PS:顯示提示框的時(shí)候,一般不允許用戶交互,就是做其他操作,如點(diǎn)擊其他按鈕,因?yàn)槟J(rèn)就是允許交互,所以這個(gè)一定要設(shè)置下
2.3 設(shè)置加載中提示框的加載動(dòng)畫
/*
SVProgressHUDAnimationTypeFlat, // 默認(rèn)動(dòng)畫類型,自定義平面動(dòng)畫
SVProgressHUDAnimationTypeNative // iOS native UIActivityIndicatorView
*/
//動(dòng)畫效果
[SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeFlat];

SVProgressHUDAnimationTypeFlat

SVProgressHUDAnimationTypeNative
3. 隱藏提示框的方法
//設(shè)置多少秒后隱藏
[SVProgressHUD dismissWithDelay:60.0];
//這個(gè)相當(dāng)于
[self performSelector:@selector(dismiss) withObject:nil afterDelay:60];
- (void)dismiss{
//這個(gè)是直接隱藏
[SVProgressHUD dismiss];
}
4. 簡(jiǎn)單的封裝
你在展示提示框設(shè)置了樣式,在其他地方使用其他提示框即使不設(shè)置也是之前那個(gè)樣式不是默認(rèn)的樣式,如果是在ViewController里面直接用self調(diào)用就行了,當(dāng)然前提是導(dǎo)入文件。主要有四個(gè)方法,第一個(gè)是加載中,第二個(gè)是純文字,第三個(gè)是失敗,第四個(gè)是成功提示,三四可以在block里面編寫在提示后要進(jìn)行的操作,如跳轉(zhuǎn)什么的,詳細(xì)看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
{
// 如果當(dāng)前視圖還有其他提示框,就dismiss
[self hideLoadingHUD];
[SVProgressHUD setDefaultStyle:SVProgressHUDStyleDark];
[SVProgressHUD setCornerRadius:5];
[SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeNative];
// 加載中的提示框一般不要不自動(dòng)dismiss,比如在網(wǎng)絡(luò)請(qǐng)求,要在網(wǎng)絡(luò)請(qǐng)求成功后調(diào)用 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();
});
}
}

