Swift - stopAnimating() - 只能在主线程中使用
Swift - stopAnimating() - must be used from main thread only
我有一系列必须按顺序执行的任务,所以它们由 DispatchQueue 控制。为了通知用户他们正在吃喝玩乐,我启动了 activity 图标。但是如果离开主线程我该如何停止呢?
从逻辑上讲,我要实现的目标是:
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。我在 SO 上阅读了类似问题的答案,但不太明白。
您可以在默认情况下执行大任务 background queue
,当大任务完成后,只需获取 main
队列并执行任何 UI 更新。
override func viewDidLoad() {
super.viewDidLoad()
self.activityIcon.startAnimating()
DispatchQueue.global().async {
self.someBigTask()
DispatchQueue.main.async {
self.activityIcon.stopAnimating()
}
}
}
希望这对您有所帮助。
我有一系列必须按顺序执行的任务,所以它们由 DispatchQueue 控制。为了通知用户他们正在吃喝玩乐,我启动了 activity 图标。但是如果离开主线程我该如何停止呢?
从逻辑上讲,我要实现的目标是:
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。我在 SO 上阅读了类似问题的答案,但不太明白。
您可以在默认情况下执行大任务 background queue
,当大任务完成后,只需获取 main
队列并执行任何 UI 更新。
override func viewDidLoad() {
super.viewDidLoad()
self.activityIcon.startAnimating()
DispatchQueue.global().async {
self.someBigTask()
DispatchQueue.main.async {
self.activityIcon.stopAnimating()
}
}
}
希望这对您有所帮助。