iOS第三方框架MBProgressHUD的使用

MBProgressHUD是一个嵌入式的iOS类,它在后台线程工作时在前台UI显示带有指示符或者半透明的标签.

iOS第三方框架MBProgressHUD的使用_第1张图片

用法

在运行长时间的任务时,需要遵循的主要准则是保持主线程不工作,因此可以及时更新UI。因此,是在主线程上使用MBProgressHUD,然后将要执行的任务旋转到新线程上。

[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    // 任务代码
    dispatch_async(dispatch_get_main_queue(), ^{
        [MBProgressHUD hideHUDForView:self.view animated:YES];
    });
});

您可以在任何view中添加HUD.但是避免将HUD添加到UIKit具有复杂视图层次结构的某些视图, 比如UITableViewUICollectionView,这样可能以意想不到的方式改变他们的子视图,从而破坏HUD显示。

使用mode属性来配置你的HUD

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

使用一个NSProgress对象,当通过该对象报告进度时,MBProgressHUD会自动更新

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;

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

你可能感兴趣的:(iOS第三方框架MBProgressHUD的使用)