Edw*_*ted 0 animation swift dispatch-queue
我有一系列必须按顺序执行的任务,因此它们被 DispatchQueue 聚集起来。为了通知用户他们正在忙碌,我启动了活动图标。但是如果脱离主线程我该如何停止呢?
从逻辑上讲,我想要实现的是:
override func viewDidLoad() {
super.viewDidLoad()
self.activityIcon.startAnimating()
DispatchQueue.main.async {
self.bigTask1()
}
DispatchQueue.main.async {
self.bigTask2()
self.activityIcon.stopAnimating()
}
}
Run Code Online (Sandbox Code Playgroud)
这显然会产生运行时错误:“UIActivityIndicatorView.stopAnimating()必须仅从主线程使用”。
将其放入stopAnimating()主队列中可以快速打开和关闭它,没有人会看到它。
像这样的队列外呼叫功能的批准方式是什么main?
非常感谢。PS我已经阅读过类似问题的答案,但不太明白。
您可以默认执行大任务background queue,当大任务完成时,只需获取main队列并执行任何 UI 更新即可。
override func viewDidLoad() {
super.viewDidLoad()
self.activityIcon.startAnimating()
DispatchQueue.global().async {
self.someBigTask()
DispatchQueue.main.async {
self.activityIcon.stopAnimating()
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望您会发现这很有帮助。