
導庫
pod 'SVProgressHUD'
-
SVProgressHUD 都有什么特點呢?
提示當前的狀態(tài),如:網(wǎng)絡傳輸、提交中、操作成功或失敗等;
可設置提示的 pop layer 是否為 model,提示的時候是否允許用戶做其他操作;
可以設置背景色和自定義提示的內容;
iOS 提示信息使用比較廣泛的有 SVProgressHUD 和 MBProgressHUB 兩種,MBProgressHUD比較全面,但是SVProgressHUD比較輕量級,使用起來非常簡潔,代碼量非常少。
使用:
因為都是類方法,引入頭文件#import "SVProgressHUD.h",直接在控制器用類名引用就好,很方便
1. 經(jīng)常使用的提示框方法:
+ (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;

顯示進度的,圖為0.1的進度,滿了為1
// 這個方法可以修改提示框上面的圖標可以調用這個方法
+ (void)showImage:(UIImage*)image status:(NSString*)status
/* 這個方法還有一種用法就是提示純文字,因為SVProgressHUD不支持直接提示純文字,但可以通過調用這個方法來實現(xiàn)提示純文字,就是不傳image就行了,
因為參數(shù)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背景圖層的樣式可在提示框方法里面把參數(shù)穿進去,現(xiàn)在不行了
2.2 設置HUD背景圖層的樣式
/**
* SVProgressHUDMaskTypeNone:默認圖層樣式,當HUD顯示的時候,允許用戶交互。
*
* SVProgressHUDMaskTypeClear:當HUD顯示的時候,不允許用戶交互。
*
* SVProgressHUDMaskTypeBlack:當HUD顯示的時候,不允許用戶交互,且顯示黑色背景圖層。
*
* SVProgressHUDMaskTypeGradient:當HUD顯示的時候,不允許用戶交互,且顯示漸變的背景圖層。
*
* SVProgressHUDMaskTypeCustom:當HUD顯示的時候,不允許用戶交互,且顯示背景圖層自定義的顏色。
*/
[SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeCustom];
所謂背景圖層樣式就是,出現(xiàn)提示框,提示框外的背景的樣式,比如背景紅色調用SVProgressHUDMaskTypeGradient這個樣式,就是這樣的
漸變的
PS:顯示提示框的時候,一般不允許用戶交互,就是做其他操作,如點擊其他按鈕,因為默認就是允許交互,所以這個一定要設置下
2.3 設置加載中提示框的加載動畫
/*
SVProgressHUDAnimationTypeFlat, // 默認動畫類型,自定義平面動畫
SVProgressHUDAnimationTypeNative // iOS native UIActivityIndicatorView
*/
//動畫效果
[SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeFlat];

SVProgressHUDAnimationTypeFlat

SVProgressHUDAnimationTypeNative
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,比如在網(wǎng)絡請求,要在網(wǎng)絡請求成功后調用 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();
});
}
}

