我的应用程序中的 MBProgressHUD 有一个小问题。
基本上,我正在以我能找到的最简单的方式使用它:
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
[self performSelector:@selector(save) withObject:nil afterDelay:0.001];
[self refreshView];
refreshView 方法在执行结束时有这一行:
[MBProgressHUD hideHUDForView:self.view animated:YES];
MBProgress 完全按照它应该的方式显示,但在其持续时间的后半段(大约)逐渐淡化到几乎不可见的状态,使其看起来好像方法在实际完成之前就已完成执行。
对这里可能出现的问题有什么想法吗?
非常感谢!
最佳答案
您需要了解的概念是运行循环。运行循环是程序中处理传入事件、计时器、网络等的内部循环(它由系统提供并运行,因此您实际上不会在代码中看到此循环。)
用这一行:
[self performSelector:@selector(save) withObject:nil afterDelay:0.001];
您安排 -save
操作在 1 毫秒后运行。 (或稍后,如果主线程正忙于做其他事情)
在安排这个-save
之后(所以不是在运行之后)你调用你的refreshView
隐藏抬头显示器。
所以实际发生的是一次显示和隐藏 HUD。所以你会看到类似显示和隐藏它的组合动画。独立地调用您的 -save
方法。
与 UIAdam 的建议相反,您确实需要 performSelector:afterDelay:
,因为您需要给运行循环一些时间来呼吸并在屏幕上显示您的眼睛糖果。用户界面的更改不会立即发生,只会在程序返回运行循环时发生。
因此,解决方法是采用这条线:
[self refreshView];
并将其移动到您的-save
方法的末尾。
关于iphone - MBProgressHUD 在完成前消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9073186/