Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios MBProgressHUD在完成后闪烁,并阻塞UI 2秒钟_Ios_Xcode_Afnetworking_Mbprogresshud_Hud - Fatal编程技术网

Ios MBProgressHUD在完成后闪烁,并阻塞UI 2秒钟

Ios MBProgressHUD在完成后闪烁,并阻塞UI 2秒钟,ios,xcode,afnetworking,mbprogresshud,hud,Ios,Xcode,Afnetworking,Mbprogresshud,Hud,我和HUD有一些问题。我正在下载一些图像和JSON,并试图显示状态 这在我的viewdidload上: HUD = [[MBProgressHUD alloc] initWithView:self.view]; HUD.labelText = @"Lade Bilder runter..."; HUD.mode = MBProgressHUDModeAnnularDeterminate; HUD.detailsLabelText = @"Schritt 1 von 2"; HUD.yOffset

我和HUD有一些问题。我正在下载一些图像和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交互

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


谢谢

我会尝试将这段代码移到
-viewdide:
而不是
-viewdideload:
。在子视图执行动画之前,确实存在一些超级视图未完全定位的情况。

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

此外,在开始网络调用之前,您需要给UI线程足够的时间来显示HUD。因为在视图中执行任何操作之前,您显然需要这些数据,所以您走的是正确的道路。您只需要给HUD留出显示和关闭的时间

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

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

更改此项:

[self downloadImages];
为此:

[self performSelector:@selector(downloadImages) withObject:nil afterDelay:0.1];
这将释放线程以完成显示HUD。解雇通常不是一个问题,因为你的行动完成与平视显示器关闭无论如何。但有时也会有类似的问题,所以可以考虑将HUD解散调用移动到主线程上调用的方法。希望这有帮助