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 后如何重置 tableview 内容高度