iOS超方便的多样式提示框
MBProgressHUD
MBProgressHUD
是一个iOS嵌入式类,在后台线程中完成工作时显示带有指示符和/或标签的半透明HUD。HUD旨在代替未记录的,UIKit
UIProgressHUD
具有某些附加功能的专用显示器。要求
MBProgressHUD
适用于iOS 9.0+。它取决于以下Apple框架,大多数Xcode模板应已包含以下框架:
- Foundation.framework
- UIKit.framework
- CoreGraphics.framework
您将需要最新的开发人员工具才能进行构建MBProgressHUD
。较旧的Xcode版本可能会起作用,但不会明确维护兼容性。
将MBProgressHUD添加到您的项目
CocoaPods
pod 'MBProgressHUD', '~> 1.2.0'
- 通过运行安装pod
pod install
。 - 随需包含MBProgressHUD
#import "MBProgressHUD.h"
。
Carthage
- MBProgressHUD添加到您的Cartfile。例如,
github "jdg/MBProgressHUD" ~> 1.2.0
- run
carthage update
- 将MBProgressHUD添加到您的项目中。
SwiftPM / Accio
.package(url: "https://github.com/jdg/MBProgressHUD.git", .upToNextMajor(from: "1.2.0")),
.target(name: "App", dependencies: ["MBProgressHUD"]),
然后在Xcode 11+(SwiftPM)中打开您的项目或运行accio update
(Accio)。
源文件
或者,您可以直接将MBProgressHUD.h
和MBProgressHUD.m
源文件添加到您的项目中。
- 下载最新的代码版本,或将存储库作为git子模块添加到git跟踪的项目中。
- 打开Xcode中的项目,然后拖放
MBProgressHUD.h
和MBProgressHUD.m
到您的项目(使用“产品导航视图”)。当询问是否从项目外部提取代码存档时,请确保选择复制项目。 - 随需包含MBProgressHUD
#import "MBProgressHUD.h"
。
在运行长时间运行的任务时处理MBProgressHUD时需要遵循的主要原则是使主线程保持无工作状态,因此可以及时更新UI。因此,建议使用MBProgressHUD的方法是在主线程上进行设置,然后将要执行的任务旋转到新线程上。
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
// Do something...
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
});
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.label.text = @"Loading";
[self doSomethingInBackgroundWithProgressCallback:^(float progress) {
hud.progress = progress;
} completionCallback:^{
[hud hideAnimated:YES];
}];
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.label.text = @"Loading";
NSProgress *progress = [self doSomethingInBackgroundCompletion:^{
[hud hideAnimated:YES];
}];
hud.progressObject = progress;
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// Do something...
[MBProgressHUD hideHUDForView:self.view animated:YES];
});