我对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进行交互。
这里有什么问题?我真的很感激帮助。
由于
答案 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解除调用移动到可以在主线程上调用的方法。希望这会有所帮助。