MBProgressHUD
是一個嵌入式的iOS類,它在后臺線程工作時在前臺UI顯示帶有指示符或者半透明的標(biāo)簽.
用法
在運(yùn)行長時間的任務(wù)時,需要遵循的主要準(zhǔn)則是保持主線程不工作鹃彻,因此可以及時更新UI醇份。因此阿弃,是在主線程上使用MBProgressHUD,然后將要執(zhí)行的任務(wù)旋轉(zhuǎn)到新線程上。
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
// 任務(wù)代碼
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
});
您可以在任何view中添加HUD.但是避免將HUD添加到UIKit
具有復(fù)雜視圖層次結(jié)構(gòu)的某些視圖, 比如UITableView
或UICollectionView
,這樣可能以意想不到的方式改變他們的子視圖,從而破壞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
對象,當(dāng)通過該對象報告進(jìn)度時,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更新,傾向于調(diào)用MBProgressHUD
應(yīng)始終在主線程上完成竹习。
如果你需要在主線程中運(yùn)行你的長時間運(yùn)行的任務(wù)誊抛,你應(yīng)該稍微延遲一點,所以UIKit將有足夠的時間來更新UI(即繪制HUD)整陌,然后用你的任務(wù)阻塞主線程拗窃。
[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];
});