私はこれを行うことによって、あなたが探しているものを達成することができるよ...
私は、曲の名前ののtableViewを持っていますmp3ファイルはParse.comに保存されています。 didSelectRowAtIndexPath
では、私はこれを実行すると、私は...
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
SelectedSongNumber = indexPath.row
grabSong()
}
func grabSong() {
let songQuery = PFQuery(className: "Songs")
songQuery.getObjectInBackgroundWithId(iDArray[SelectedSongNumber], block: {
(object: PFObject?, error : NSError?) -> Void in
if let audioFile = object?["SongFile"] as? PFFile {
let audioFileUrlString: String = audioFile.url!
let audioFileUrl = NSURL(string: audioFileUrlString)!
myAVPlayer = AVPlayer(URL: audioFileUrl)
myAVPlayer.play()
currentUser?.setObject(audioFileUrlString, forKey: "CurrentSongURL")
currentUser?.saveInBackground()
}
})
}
は、私は、行を選択しないと曲が再生を開始します。数秒待って別の行を選択すると、AVPlayerは選択した新しいセルの曲を再生し、もう一方の曲は再生しません。私のAVPlayerは、すべてのクラスの公開変数として宣言されています。
私が言ったように、作成した後はAVPlayerオブジェクトにアクセスしないでください。むしろ、そのcurrentItemだけで動作します。 –
@JamesBush実際、あなたの方が良い方法です。別のオプションは、AVQueuePlayerを使用して、可能なすべてのURLにAVPlayerItems配列を追加し、その配列をキューに挿入し、その配列を即座に並べ替えることです。これにより、前のビデオがまだ再生されている間、次のビデオのバッファリングが開始されます。 – MikeG
または [self.player prerollAtRate:1.0 completionHandler:^(BOOL finished){ [self.player play]; [self.player setRate:1。0]; }]; –