所以我有一個UITableViewController,每個單元格里面都有一個播放按鈕和一個暫停按鈕,以便播放音樂。當你按下播放按鈕時,它應該播放特定于該單元格的音樂,然而當我運行我的代碼時,它播放的是隨機的音頻,而不是我專門為它加載的音樂。另外,當我滾動表視圖時,音頻停止播放。為什么會出現這種情況,我怎樣才能解決這個問題?我還想讓它在不同單元格的播放按鈕被按下時切換歌曲。
下面是我用來加載唯一的字串(由post.mp3產生)的函式,以找到我的AVPlayer的url檔案:
func loadAudio(post: CompPost, completion: @escaping (URL) ->())
{
let audioRef = Storage.storage()。 reference().child("cPosts").child(post.uid).child("Audio").child(post.mp3)
audioRef.downloadURL
{ (url, error) in.
print("mp3filename: " post.mp3)
guard error == nil else
{
print(error!.localizedDescription)
return /**alert**/
}
self.audioPlayer = AVPlayer(playerItem: AVPlayerItem(url: url! )
completion(url!)
}
}
下面是為每個單元格加載唯一的url的代碼:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell[/span
{
let cell = tableView.dequeueReusableCell(withIdentifier: "cPostCell", for: indexPath) 作為! cPostCell
cell.delegate =self
cell.index = indexPath
//為簡潔起見省略了其他代碼。
loadAudio(post: compPosts[indexPath.row])
{ (url) in
print("this is the URL"/span>)
print(url)
}
return cell
}
點擊播放按鈕的函式:
func playMusic(index: Int)
{
audioPlayer.play()
isPlaying = true
print("正在播放")
}
uj5u.com熱心網友回復:
問題是當你觸發audioPlayer.play()時,你沒有加載新的AVPlayerItem到你的AVPlayer中,因此當你點擊播放按鈕時,播放器開始播放你最后加載的tableViewCell中的專案。試著將所有的playerItems保存到具有一定索引的陣列中,當用戶點擊具有索引的按鈕時,你將加載音頻,并在加載程序中,你將新的AVPlayerItem分配給AVPlayer :
audioPlayer = AVPlayer(playerItem: yourPlayerItemArray[index])
之后,你觸發audioPlayer.play()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/311701.html
標籤:
