LYCtestDemo 0.0.4

LYCtestDemo 0.0.4

测试已测试
语言语言 Obj-CObjective C
许可证 MIT 许可协议
发布日期最后发布日期2017 年 10 月

niolgowoma1993. 维护。



  • 作者
  • niolgowoma1993.

MBProgressHUD


MBProgressHUD 是一个 iOS 插件类,它在后台线程中工作时会显示一个半透明的 HUD,并带有指示器和/或标签。HUD 的目的是替代未记录的私有 UIKit UIProgressHUD,并具有一些附加功能。







注意: 类最近进行了重大重构。如果您需要旧版本,可以在 遗留分支 中找到。

要求

MBProgressHUD 在 iOS 6+ 上运行,并需要 ARC 来编译。它依赖于以下 Apple 框架,这些框架通常包含在大多数 Xcode 模板中

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

您需要最新的开发工具来编译 MBProgressHUD。旧版本的 Xcode 可能也能工作,但不会明确维护兼容性。

将 MBProgressHUD 添加到您的项目中

源文件

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

  1. 下载最新代码版本 [master.zip] 或将存储库作为 Git 子模块添加到您的 git 跟踪项目。
  2. 在 Xcode 中打开您的项目,然后拖放 MBProgressHUD.hMBProgressHUD.m 到您的项目中(使用“产品导航视图”)。如果您在项目外提取代码存档,务必在询问时选择副本。
  3. 使用 #import "MBProgressHUD.h" 在需要 MBProgressHUD 的任何地方包含它。

静态库

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

  1. 下载最新代码版本或添加存储库作为 Git 子模块到您的 git 跟踪项目 [下载]
  2. 在 Xcode 中打开您的项目,然后将 MBProgressHUD.xcodeproj 拖放到您的项目或工作空间(使用“产品导航视图”)。
  3. 选择您的目标并转到“构建阶段”选项卡。在“与二进制文件链接”部分选择添加按钮。在表单中找到并添加 libMBProgressHUD.a。您可能还需要将 MBProgressHUD 添加到“目标依赖项列表”中。
  4. 使用 #import <MBProgressHUD/MBProgressHUD.h> 在需要 MBProgressHUD 的任何地方包含它。

用法

在处理 MBProgressHUD 的运行长时间任务时,您需要遵循的主要指南是保持主线程无工作,以便及时更新 UI。因此,使用 MBProgressHUD 的推荐方法是将其配置在主线程上,然后将您要执行的任何任务 spun off 到一个新的线程。

[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版本的简要摘要可以在CHANGELOG中找到。