2015-12-28 3 views
1

Я создаю быстрое приложение с AVFoundation и используя AVAudioPlayerNode. Я отключу кнопку воспроизведения во время воспроизведения и в части завершения проигрывателя, которую я включил, но кнопка остается прозрачной более 10 секунд. Кнопка доступна, и моя печать («полная») отображается немедленно, поэтому кажется, что представление не обновляется. Вот мой код:программно разрешающих кнопок, занимающих несколько секунд

player.scheduleBuffer(buffer, completionHandler: {    
      print("complete") 
      self.playButton.enabled = true 
      } 
     ) 

Я попытался следующие без везения:

self.view.layoutIfNeeded() 
player.scheduleBuffer(buffer, completionHandler: { 
      print("complete") 
      self.playButton.enabled = true 
      self.playButton.reloadInputViews() 
      self.view.layoutIfNeeded() 
      } 
     ) 
+0

Один из многих дублей: http://stackoverflow.com/questions/32296295/uiimageviews-image-takes-up-to-10-seconds -нагрузка – Sulthan

ответ

1

Обработчик завершения не находится в основной теме. Вы можете переместить эту часть кода, используя этот код:

self.player.scheduleBuffer(buffer, completionHandler: { 

    print("complete") 

    dispatch_async(dispatch_get_main_queue(),{ 
    self.playButton.enabled = true 
    }) 
}) 
2

Это, вероятно, потому, что обработчик завершения не вызывается в главном потоке, который отвечает за обновление пользовательского интерфейса.

Проверьте, если обработчик завершения выполняется в главном потоке, если нет, то добавить код, отвечающий за обновление пользовательского интерфейса на главном потоке

Для быстрой проверки причин, почему UI не обновляется сразу попробовать это, поместите код в обработчике завершения дополнительно в:

NSOperationQueue.mainQueue().addOperationWithBlock({ 
     print("complete") 
     self.playButton.enabled = true 
     self.playButton.reloadInputViews() 
     self.view.layoutIfNeeded() 
    }) 

Проверка код выполняется в главном потоке может быть сделан в быстром, как:

print(NSThread.isMainThread()) 

Я предполагаю, что вы разместили layoutIfNeeded, ища решение, без большого контекста. Я не могу сказать со 100% уверенным, но, вероятно, он вам не понадобится.

+0

Спасибо за ответ. Как я могу это исправить? –

+0

Я попытался вызвать функцию основного потока из обработчика завершения, но это не помогло. –

+0

как вы это сделали? –

Смежные вопросы