Swift - stopAnimating() - 必须仅在主线程中使用

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我已经阅读过类似问题的答案,但不太明白。

Rat*_*ain 5

您可以默认执行大任务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)

希望您会发现这很有帮助。