Как обновить Swift UIViewController из функции обратного вызова Delegate - PullRequest
0 голосов
/ 26 июня 2018

Я нуб.У меня есть некоторый опыт программирования, но я новичок в Swift 4 и Xcode 9.2.

Я брал уроки и читал.Я реализовал один из множества примеров Music Player.Я расширил его для отображения метатданных песни.Это отлично работает.

Я реализовал функцию AVAudioPlayerDelegate audioPlayerDidFinishPlaying ().В этой функции я беру метаданные следующих песен, устанавливаю переменные представления и воспроизводю песню.Песня воспроизводится, но старые метаданные песни остаются.

Как обновить представление новыми метаданными?

Заранее извиняюсь за такой простой вопрос.Я интенсивно искал ответ и либо не понял, либо, кажется, не подходит.Будь добр, я старый и хрупкий.

import UIKit
import AVFoundation

class SecondViewController: UIViewController, AVAudioPlayerDelegate {
    @IBOutlet weak var currentSongArtwork: UIImageView!
    @IBOutlet weak var currentSongTitle: UILabel!
    var audioPlayer = AVAudioPlayer()

    override func viewDidLoad() {
        super.viewDidLoad()
        playSong()
    }

    func playSong() {
        extractSongMetaData()
        currentSongTitle.text = extractedSongTitle
        currentSongArtwork = extractedSongArtwork

        let audioPath = Bundle.main.path(forResource: songs[currentSongIndex], ofType: ".m4a")
        try audioPlayer = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPath!) as URL)
        audioPlayer.delegate = self
        audioPlayer.play()
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        // Increment currentSongIndex

        playSong()
      }
}

1 Ответ

0 голосов
/ 26 июня 2018

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

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
    // Increment currentSongIndex

    DispatchQueue.main.async
    {
        playSong()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...