作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 presentViewController:animated:completion:
呈现的 UIViewController
。在被关闭之前,它需要执行一些需要几秒钟才能完成的计算,所以我想使用 UIActivityIndicator
来显示某种反馈,这样用户就不会认为应用程序卡住了。
我将事件指示器保存到属性中只是为了在更改方法流程时更容易跟踪。理想情况下,当用户点击“关闭”按钮时,将执行以下操作:
- (void) saveAndClose {
[self.activityIndicator startAnimating];
[self performNecessaryCalculations]; // this takes a little while and returns only when finished
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
但屏幕上实际上没有任何变化。这不是事件指示器可见性或功能的问题,因为如果我运行:
- (void) saveAndClose {
[self.activityIndicator startAnimating];
}
它的动画效果很好。似乎在方法结束之前 View 甚至没有尝试重绘任何东西。我如何通过一次按钮点击实现动画、计算和消除的所需顺序?
编辑:我已经尝试了建议的 dispatch_async
方法,但它还没有按预期运行。
[self.activityIndicator startAnimating];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performNecessaryCalculations];
dispatch_async(dispatch_get_main_queue(), ^{
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
});
});
上面的代码正确显示了事件指示器。但是,performNecessaryCalculations
方法包括对离屏 View Controller 的 tableView reloadData
的调用。这是当有问题的 Controller 被解散时变得可见的 Controller 。 tableView 不会立即正确刷新,但只有在用户尝试与其交互(滚动)后才会刷新,或者它也会在坐在那里一分钟左右后刷新(在我输入所有这些内容时自行刷新)。
有什么建议吗?
最佳答案
尝试这样的事情:
[self.activityIndicator startAnimating];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performNecessaryCalculations];
dispatch_async(dispatch_get_main_queue(), ^{
[self.activityIndicator stopAnimating];
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
});
});
关于ios - UIActivityIndicator 在同一方法中启动和停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259987/
我是一名优秀的程序员,十分优秀!