ios - UIActivityIndi​​cator 在同一方法中启动和停止

标签 ios uiactivityindicatorview

我有一个使用 presentViewController:animated:completion: 呈现的 UIViewController。在被关闭之前,它需要执行一些需要几秒钟才能完成的计算,所以我想使用 UIActivityIndi​​cator 来显示某种反馈,这样用户就不会认为应用程序卡住了。

我将事件指示器保存到属性中只是为了在更改方法流程时更容易跟踪。理想情况下,当用户点击“关闭”按钮时,将执行以下操作:

- (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 - UIActivityIndi​​cator 在同一方法中启动和停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259987/

相关文章:

ios - Three20:很多语义问题

从 Appstore 下载后 iOS 应用程序崩溃

ios - 如何将 UIActivityIndi​​cator 插入搜索栏文本字段?

ios - 是否可以在 iOS 中将 UIActivityIndi​​catorView 颜色更改为黑色?

ios - 相同的字符显示不同的十六进制代码

iphone - 显示 CALayer 动画的帧速率 (FPS)

ios - 什么是 IOS 6 等同于 “maximumUpdateValueLength” 得到相同的值?

ios - 如何在同一类中使用警报和微调器?

ios - 切换 View Controller 时显示 UIActivityIndi​​catorView

iphone - UIActivity 指示器不显示