https://github.com/jdg/MBProgressHUD
一、使用步骤
1.下载MBProgressHUD,导入工程。
2.在需要的地方导入头文件。
#import <MBProgressHUD/MBProgressHUD.h>
3.使用HUD
(1)主线程让HUD旋转,开启子线程处理长时间的任务。
[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];
});
});
(2)当你想配置HUD的时候,你可以配置这个方法showHUDAddedTo:animated:返回的示例。
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.labelText = @"Loading";
[selfdoSomethingInBackgroundWithProgressCallback:^(float progress) {
hud.progress = progress;
} completionCallback:^{
[hud hide:YES];
}];
UI的更新需要在主线程。然而一些MBProgressHUD访问器考虑到线程安全可以被后台线程调用。这些访问器包括
setMode:,setCustomView:,setLabelText:,setLabelFont:,setDetailsLabelText:, setDetailsLabelFont: and setProgress:。
(3)如果你需要在主线程中运行你的长时间任务,你应该稍微延迟一些运行这任务,这样UIKit在阻碍你主线程的任务前将会有足够的时间来更新UI。
[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];
});
你要知道任何在block中的HUD更新,直到block完成才会显示。看更多的异步任务中HUD显示的Demo,看头文件中的API文档。