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

时间:2019-05-25 09:23:43

标签: swift animation dispatch-queue

我有一连串必须按顺序执行的任务,因此它们被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.我已经读过类似问题的答案,但还不太明白。

1 个答案:

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

}

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