Swift - stopAnimating() - 只能在主线程中使用

Posted

技术标签:

【中文标题】Swift - stopAnimating() - 只能在主线程中使用【英文标题】:Swift - stopAnimating() - must be used from main thread only 【发布时间】:2019-05-25 09:23:43 【问题描述】:

我有一系列任务必须按顺序执行,因此它们由 DispatchQueue 控制。为了通知用户他们正在离开,我启动了活动图标。但是如果离开主线程,我该如何停止呢?

从逻辑上讲,我想要实现的是:

override func viewDidLoad() 
   super.viewDidLoad()    
   self.activityIcon.startAnimating()

   DispatchQueue.main.async 
      self.bigTask1()   
   

   DispatchQueue.main.async 
      self.bigTask2()  
      self.activityIcon.stopAnimating() 
   

这显然会产生运行时错误:“UIActivityIndicatorView.stopAnimating() must be used only from main thread”。

stopAnimating() 放在主队列中可以快速打开和关闭它,没人会看到它。

main 队列中调用此类函数的批准方式是什么?

非常感谢。附:我已经阅读了关于 SO 的类似问题的答案,但不太明白。

【问题讨论】:

【参考方案1】:

您可以在默认 background queue 中执行大任务,当大任务完成后,只需获取 main 队列并执行任何 UI 更新。

override func viewDidLoad() 
   super.viewDidLoad()

   self.activityIcon.startAnimating()

   DispatchQueue.global().async 
      self.someBigTask()

      DispatchQueue.main.async 
         self.activityIcon.stopAnimating()
      
   


希望您会发现这对您有所帮助。

【讨论】:

以上是关于Swift - stopAnimating() - 只能在主线程中使用的主要内容,如果未能解决你的问题,请参考以下文章

动画没有停止使用 UIView.animate

隐藏 UIView 后如何重置 tableview 内容高度

ios怎样在imageView实现动画

swift [Swift Notes]在学习Swift #Swift的同时收集笔记

Swift 反射

Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift