rápido. AVPlayer. ¿Cómo rastrear cuándo terminó la canción?

¿Cuál es la manera oriental de rastrear cuando la canción terminó de reproducirse con AVPlayer en Swift?

¿Hay alguna function que se llame cuando avplayer termine de jugar o debo combinar el timer con las references de class de avplayer?

Algo así funciona:

func play(url: NSURL) { let item = AVPlayerItem(URL: url) NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerDidFinishPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: item) let player = AVPlayer(playerItem: item) player.play() } func playerDidFinishPlaying(note: NSNotification) { // Your code here } 

¡No te olvides de eliminar al observador cuando hayas terminado (o en deinit )!

AVAudioPlayerDelegate crear un object que implemente el protocolo AVAudioPlayerDelegate , y lo use como delegado del object AVAudioPlayer . Luego, vinculalos juntos, por ejemplo:

 audioPlayer = try! AVAudioPlayer(contentsOf: audioFileUrl) audioPlayer.delegate = self 

El delegado puede implementar methods que respondan a ciertos events. Este se dispara cuando el audio termina de reproducirse:

 func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { // ... } 

Otra versión para Swift 3

 NotificationCenter.default.addObserver(self, selector: #selector(self.playerDidFinishPlaying(sender:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: item) func playerDidFinishPlaying(sender: Notification) { // Do Something } 

Para Swif3 necesitará cambiar de la siguiente manera:

 func play(url: NSURL) { let item = AVPlayerItem(URL: url) NotificationCenter.default.addObserver(self,selector:Selector("playerDidFinishPlaying"), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: item) let player = AVPlayer(playerItem: item) player.play() } func playerDidFinishPlaying() { // Your code here }