gpt4 book ai didi

swift - 如何从委托(delegate)回调中刷新 Swift UIViewController

转载 作者:行者123 更新时间:2023-11-28 07:45:58 25 4
gpt4 key购买 nike

我是个菜鸟。我有一些编程经验,但我是 Swift 4 和 Xcode 9.2 的新手。

我一直在学习教程和阅读。我已经实现了可以找到的众多音乐播放器示例之一。我已将其扩展为显示歌曲元数据。这很好用。

我已经实现了 AVAudioPlayerDelegate audioPlayerDidFinishPlaying() 函数。在此函数中,我获取下一首歌曲的元数据、设置 View 变量并播放歌曲。歌曲开始播放,但旧歌曲的元数据仍然存在。

如何使用新元数据刷新 View ?

我提前为这么简单的问题道歉。我广泛搜索了答案,但要么不理解,要么似乎不适用。善待我,我又老又脆弱。

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()
}
}

最佳答案

您可能需要在 UI 线程中调用 playSong 以使其正确刷新。

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

DispatchQueue.main.async
{
playSong()
}
}

关于swift - 如何从委托(delegate)回调中刷新 Swift UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51032267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com