0

我对 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 进行交互。

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

谢谢

4

2 回答 2

0

我会按照其他答案所说的那样做,并将您的逻辑移动到 viewDidLoad 或 viewDidAppear 以防止视图出现任何启动问题。

此外,在开始网络调用之前,您需要给 UI 线程足够的时间来显示 HUD。由于您显然需要数据才能在视图中执行任何操作,因此您走在正确的道路上。您只需要让 HUD 有时间显示和关闭。

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

我实际上会改变你的网络电话。

改变这个:

[self downloadImages];

对此:

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

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

于 2012-12-20T16:57:20.023 回答
0

我会尝试将这段代码移动到-viewDidAppear:而不是-viewDidLoad:. 当子视图执行动画之前超级视图没有完全定位时,肯定会出现一些奇怪的问题。

于 2012-11-12T23:39:43.000 回答