CocoaCategory 0.0.2

CocoaCategory 0.0.2

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最新发布2017年10月

907376361 维护。



  • Allien

MBProgressHUD


MBProgressHUD 是一个 iOS 快速集成类,在后台线程执行任务时,它会显示一个半透明的 HUD,包含指示器和/或标签。HUD 被设计为传统未记录的私有 UIKit UIProgressHUD 的替代品,并具有一些额外的功能。







注意: 该类最近进行了大规模重写。如果您需要旧版本,可以在 legacy 分支中找到。

要求

_MBProgressHUD 在 iOS 6+ 上运行并需要 ARC 来构建。它依赖于以下 Apple 框架,这些框架应已包含在大多数 Xcode 模板中:

  • Foundation.framework
  • UIKit.framework
  • CoreGraphics.framework

您需要最新的开发工具才能构建 MBProgressHUD。旧版本的 Xcode 可能也可以工作,但不保证兼容性。

向您的项目添加 MBProgressHUD

源文件

或者,您可以直接将 MBProgressHUD.hMBProgressHUD.m 源文件添加到您的项目中。

  1. 下载最新代码版本 latest code version 或将仓库作为 git 子模块添加到您的 git 跟踪项目中。
  2. 在 Xcode 中打开您的项目,然后将 MBProgressHUD.hMBProgressHUD.m 拖放到您的项目(使用“Product Navigator view”)中。确保在选择提取代码存档时选中“Copy items”(复制项目)。
  3. 在需要的地方使用 #import "MBProgressHUD.h" 包含 MBProgressHUD。

静态库

您还可以将 MBProgressHUD 作为静态库添加到您的项目或工作空间中。

  1. 下载最新代码版本 latest code version 或将仓库作为 git 子模块添加到您的 git 跟踪项目中。
  2. 在 Xcode 中打开您的项目,然后将 MBProgressHUD.xcodeproj 拖放到您的项目或工作空间(使用“Product Navigator view”)中。
  3. 选择您的目标,然后转到“构建阶段”标签。在“链接二进制与库”部分选择添加按钮。在表单中找到并添加 libMBProgressHUD.a。您可能还需要将 MBProgressHUD 添加到“目标依赖项”列表中。
  4. 在需要的地方使用 #import <MBProgressHUD/MBProgressHUD.h> 包含 MBProgressHUD。

用法

在处理 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];
	});
});

您可以在任何视图或窗口上添加HUD。然而,避免将HUD添加到某些具有复杂视图层次结构的UIKit视图(例如UITableViewUICollectionView)是一个好主意。因为这些视图可能会以不可预期的方式更改其子视图,从而破坏HUD的显示。

如果您需要配置HUD,可以通过使用showHUDAddedTo:animated:返回的MBProgressHUD引用来完成。

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.labelText = @"Loading";
[self doSomethingInBackgroundWithProgressCallback:^(float progress) {
	hud.progress = progress;
} completionCallback:^{
	[hud hide:YES];
}];

您还可以使用一个NSProgress对象,当通过该对象报告进度时,MBProgressHUD将更新自己。

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.labelText = @"Loading";
NSProgress *progress = [self doSomethingInBackgroundCompletion:^{
	[hud hide:YES];
}];
hud.progressObject = progress;

UI更新应该在主线程上完成。但是,一些MBProgressHUD设置器被认为是“线程安全”的,可以从后台线程调用。这些也包括setMode:setCustomView:setLabelText:setLabelFont:setDetailsLabelText:setDetailsLabelFont:setProgress:

如果您需要在主线程上运行长时间运行的任务,您应该稍作延迟将其执行,这样UIKit将有足够的时间更新UI(例如,绘制HUD),在您用任务阻塞主线程之前。

[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];
});

请注意,在任何上述块中发布的任何HUD更新都不会在块完成之前显示。

有关更多示例,包括如何使用MBProgressHUD与异步操作(如NSURLConnection)的示例,请参阅捆绑的演示项目。在头文件(MBProgressHUD.h)中提供了详细的API文档。

许可证

本代码在MIT许可的条款和条件下分发。

变更日志

每个MBProgressHUD发布的简短总结可以在变更日志中找到。