導(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)槎际穷?lèi)方法藤违,引入頭文件#import "SVProgressHUD.h"
浪腐,直接在控制器用類(lèi)名引用就好,很方便
1. 經(jīng)常使用的提示框方法:
+ (void)showSuccessWithStatus:(nullable NSString*)status;
+ (void)showErrorWithStatus:(nullable NSString*)status;
+ (void)showWithStatus:(nullable NSString*)status;
//也是加載中的提示框顿乒,不過(guò)沒(méi)有文字
+ (void)show;
+ (void)showInfoWithStatus:(nullable NSString*)status;
+ (void)showProgress:(float)progress;
// 如果要在下方顯示文字议街,可以用這個(gè)方法
+ (void)showProgress:(float)progress status:(nullable NSString*)status;
// 這個(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沒(méi)有__nonNull修飾,所以不能直接傳nil搓蚪,會(huì)報(bào)警告蛤售,雖然不報(bào)錯(cuò)。我們可以傳一張空?qǐng)D片進(jìn)去妒潭,寫(xiě)法如下*/
[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)畫(huà)
/*
SVProgressHUDAnimationTypeFlat, // 默認(rèn)動(dòng)畫(huà)類(lèi)型,自定義平面動(dòng)畫(huà)
SVProgressHUDAnimationTypeNative // iOS native UIActivityIndicatorView
*/
//動(dòng)畫(huà)效果
[SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeFlat];
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里面編寫(xiě)在提示后要進(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();
});
}
}