0
我正在開發一個音樂流應用程序,用於從數據庫流式傳輸音樂。我的代碼動態地爲我的數據庫中的每首歌曲創建按鈕,當點擊這些按鈕時,他們播放mp3文件。但是,我無法弄清楚如何暫停音樂,當我多次點擊按鈕時,歌曲會自動播放,因此兩首歌曲同時播放。我已經嘗試過player.pause()等等,但是沒有什麼能夠阻止音樂播放/流媒體和循環播放。停止AVPlayer循環
import UIKit
import AVKit
import AVFoundation
class ViewController: UIViewController {
var songArray: [Array<String>] = [] //array to contain song names and filepaths
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//connect to website
let url = URL(string:"http://cgi.soic.indiana.edu/~team22/SongData.php")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil
{
print("error")
}
else
{
if let content = data
{
do
{
//download JSON data from php page, display data
let JSON = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as! [[String]]
print(JSON)
//Make buttons with JSON array
var buttonY: CGFloat = 20
for song in JSON {
//add information to array
self.songArray.append(song)
let SongButton = UIButton(frame: CGRect(x: 50, y: buttonY, width: 250, height: 30))
buttonY = buttonY + 50 // 50px spacing
SongButton.layer.cornerRadius = 10 //Edge formatting for buttons
SongButton.backgroundColor = UIColor.darkGray //Color for buttons
SongButton.setTitle("\(song[0])", for: UIControlState.normal) //button title
SongButton.titleLabel?.text = "\(song[0])" // set title label
SongButton.addTarget(self,action: #selector(self.songButtonPressed(_:)), for: UIControlEvents.touchUpInside) //button press/response
self.view.addSubview(SongButton) // adds buttons to view
}
}
catch
{
}
}
}
}
task.resume()
print(songArray)
}
func songButtonPressed(_ sender:UIButton!) { // Streaming function for buttons when pressed
for song in songArray {
if "\(song[0])" == sender.titleLabel?.text { //compare loop element to name of button pressed
let URL = NSURL(string: song[1]) //plug loop element into audio player
let player = AVPlayer(url: URL! as URL)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.bounds
self.view.layer.addSublayer(playerLayer)
player.play()
}
}
}
}