gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:03:51 25 4
gpt4 key购买 nike

我有一个使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com