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()
      }
   }

}

希望这对您有所帮助。