Ios MBProgressHUD在完成后闪烁,并阻塞UI 2秒钟
我和HUD有一些问题。我正在下载一些图像和JSON,并试图显示状态 这在我的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
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解散调用移动到主线程上调用的方法。希望这有帮助