Swift - stopAnimating () - должен использоваться только из основного потока - PullRequest
0 голосов
/ 25 мая 2019

У меня есть последовательность задач, которые должны выполняться последовательно, поэтому они отображаются в 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 очередь?

Большое спасибо.PS Я читал ответы на подобные вопросы на SO, но не совсем их понимаю.

1 Ответ

3 голосов
/ 25 мая 2019

Вы можете выполнить большую задачу по умолчанию background queue, а когда большая задача завершится, просто получите очередь main и выполните все обновления пользовательского интерфейса.

override func viewDidLoad() {
   super.viewDidLoad()

   self.activityIcon.startAnimating()

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

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

}

Надеюсь, вы найдете это полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...