CACategories 0.0.2

CACategories 0.0.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布日期最新发布2016年7月

Cary维护。



 
依赖
MBProgressHUD>= 0
SpinKit>= 0
 

  • Cary

MBProgressHUD

MBProgressHUD是一个iOS类,可以在后台线程中工作并显示带有指示器/IP或标签的不透明HUD,The HUD被视为替代文档不公开的、私有的UIKit UIProgressHUD的一些附加功能。

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

需求

MBProgressHUD在iOS 6+上工作并需要ARC来构建。它依赖于以下Apple框架,这些框架通常已经包含在大多数Xcode模板中

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

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

将MBProgressHUD添加到项目中

源文件

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

  1. 下载最新代码版本或将存储库作为git子模块添加到您的git跟踪项目中。
  2. 在Xcode中打开您的项目,然后将MBProgressHUD.hMBProgressHUD.m拖放到您的项目(使用“Product Navigator视图”)。如果您在项目外部提取了代码存档,请确保选择“复制项目项”。
  3. 在需要MBProgressHUD的任何地方使用#import "MBProgressHUD.h"进行包含。

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

  1. 下载最新代码版本或将存储库作为git子模块添加到您的git跟踪项目中。
  2. 在Xcode中打开您的项目,然后将MBProgressHUD.xcodeproj拖放到您的项目或工作空间(使用“Product Navigator视图”)。
  3. 选择您的目标并转到“构建阶段”标签。在“链接二进制与库”部分选择添加按钮。在对话框中找到并添加libMBProgressHUD.a。您可能还需要将MBProgressHUD添加到目标依赖列表中。
  4. 在每个需要MBProgressHUD的地方使用#import <MBProgressHUD/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];
    });
});

您可以在任何视图或窗口上添加HUD。然而,避免将HUD添加到具有复杂视图层次结构的某些UIKit视图是一个好主意——例如。这些视图可能会以意想不到的方式修改其子视图,从而破坏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];
}];

您还可以使用一个对象,当通过该对象报告进度时,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设置器被认为是“线程安全”的,因此可以从后台线程调用。这包括

如果您需要在主线程上运行长时间运行的任务,您应该稍微延迟执行,这样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),请参阅捆绑的演示项目。API文档 extensive 提供在头文件(MBProgressHUD.h)。

许可证

此代码根据MIT许可证的条款和条件进行分发。

变更日志

每个MBProgressHUD发布的简要总结可以在CHANGELOG中找到。