我有一连串必须按顺序执行的任务,因此它们被DispatchQueue占用。为了通知用户他们正在拥抱,我启动活动图标。但是,如果离开主线程该如何停止?
从逻辑上讲,我想要实现的是:
override func viewDidLoad() {
super.viewDidLoad()
self.activityIcon.startAnimating()
DispatchQueue.main.async {
self.bigTask1()
}
DispatchQueue.main.async {
self.bigTask2()
self.activityIcon.stopAnimating()
}
}
这显然会产生运行时错误:“只能从主线程使用UIActivityIndicatorView.stopAnimating()
”。
将stopAnimating()
放入主队列可以将其打开和关闭的速度如此之快,没人能看到它。
在main
队列之外,这样的批准方式调用函数是什么?
非常感谢。 P.s.我已经读过类似问题的答案,但还不太明白。
答案 0 :(得分:3)
您可以在默认的background queue
下执行大任务,当大任务完成时,只需获取main
队列并执行所有UI更新即可。
override func viewDidLoad() {
super.viewDidLoad()
self.activityIcon.startAnimating()
DispatchQueue.global().async {
self.someBigTask()
DispatchQueue.main.async {
self.activityIcon.stopAnimating()
}
}
}
希望您会发现这很有帮助。