在方法持续时间内显示MBProgressHUD

时间:2012-08-05 22:19:04

标签: iphone objective-c uiactivityindicatorview mbprogresshud

我有一种方法可以从地址簿中获取联系人并使用(“getContactInformation”)做一些事情。

这个过程有点长(几秒),在此过程之后我会显示一个新的ViewController。为了使用户友好,我想使用 MBProgressHUD 在过程开始时显示活动指示器并在结束时隐藏它。

哪种方法最好?我测试了这个:

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.labelText = @"Retrieving information...";

[self getContactInformation];

[MBProgressHUD hideHUDForView:self.view animated:YES];

[self presentViewController:newController animated:NO completion:nil];

但是它不起作用(它没有显示指标)。有人可以帮帮我吗?

提前谢谢

2 个答案:

答案 0 :(得分:1)

[self presentViewController:newController animated:NO completion:nil];保留一个单独的方法。并尝试在特定延迟后调用该方法。这应该是解决问题。

答案 1 :(得分:1)

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    [self getContactInformation];
    dispatch_async(dispatch_get_main_queue(), ^{
        [MBProgressHUD hideHUDForView:self.mapView animated:YES];
    });
});

这将生成一个运行getContactInformation的线程,并且不会阻塞进行UI更改所需的主线程(例如显示HUD)。

我猜测当你收到联系信息并且没有时间更新以显示HUD时,主线程被锁定。方法完成后,再次获取主线程以更新UI(删除HUD)。