完成后MBProgressHUD闪烁并阻止UI 2秒钟

时间:2012-11-06 16:21:24

标签: ios xcode afnetworking mbprogresshud hud

我对MBProgressHUD有些问题。我正在下载一些图像和JSON并尝试显示状态。

这是我的viewdidload

HUD = [[MBProgressHUD alloc] initWithView:self.view];
HUD.labelText = @"Lade Bilder runter...";
HUD.mode = MBProgressHUDModeAnnularDeterminate;
HUD.detailsLabelText = @"Schritt 1 von 2";
HUD.yOffset = -10;
[self.view addSubview:HUD];
[HUD show:YES];
[self downloadImages];

showWhileExecuting无法使用NSOperationQueue。我不知道为什么。因此,方法downloadImages使用NSOperationQueue来处理AFNetworking的下载。 NSOperationQueue完成后,我致电finishedDownload

该方法调用

[HUD hide:YES];

这很有效。 HUD正在隐藏,但UITableView被阻止了大约2秒。在那2秒之后,HUD闪烁并立即隐藏。在那次闪光之后,我可以与UITableView进行交互。

这里有什么问题?我真的很感激帮助。

由于

2 个答案:

答案 0 :(得分:0)

我会尝试将这段代码移到-viewDidAppear:而不是-viewDidLoad:。在子视图执行动画之前,当超视图未完全定位时,肯定有一些weird issues

答案 1 :(得分:0)

我会按照另一个答案说的做,并将您的逻辑移至viewDidLoad或viewDidAppear,以防止视图出现任何启动问题。

此外,您需要在开始网络呼叫之前为UI线程提供足够的时间来显示HUD。由于在您可以在视图中执行任何操作之前显然需要数据,因此您处于正确的路径上。您只需要允许HUD时间显示和解雇。

HUD通常在显示时阻止UI ...因此用户无法使用当前视图(后退按钮,其他按钮)执行任何操作,但可以访问其他内容,例如标签栏项目或未链接到您添加HUD的视图的任何内容。

我实际上会更改您的网络电话。

改变这个:

[self downloadImages];

对此:

[self performSelector:@selector(downloadImages) withObject:nil afterDelay:0.1];

这将释放你的线程以完成显示HUD。解雇通常不是一个问题,因为无论如何你的行动完成了HUD关闭。但有时您可能遇到类似的问题,因此您可以考虑将HUD解除调用移动到可以在主线程上调用的方法。希望这会有所帮助。