plus cuenta con activar ios swift avplayer

ios - cuenta - rápido. AVPlayer. ¿Cómo rastrear cuando la canción terminó de tocar?



nfc iphone 8 plus activar (7)

Algo como esto 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 olvides eliminar al observador cuando hayas terminado (o en deinit )!

¿Cuál es la forma en que se puede seguir este camino cuando la canción terminó de reproducirse con AVPlayer en Swift?

¿Hay alguna función que se llame cuando avplayer haya terminado de jugar o debo combinar el temporizador con las referencias de clase de avplayer?


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 tendrá que 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 }


Una solución más completa está aquí:

import UIKit import AVFoundation import MediaPlayer class ViewController: UIViewController,AVAudioPlayerDelegate { var player: AVAudioPlayer = AVAudioPlayer() @IBAction func play(_ sender: UIButton) { player.play() player.currentTime=14*60-10 print(player.currentTime) } @IBAction func pause(_ sender: UIButton) { player.pause() } @IBAction func replay(_ sender: UIButton) { player.currentTime=0 } override func viewDidLoad() { super.viewDidLoad() do{ let audioPath = Bundle.main.path(forResource: "elon", ofType: "mp3") player = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: audioPath!)) player.prepareToPlay() player.delegate = self } catch{ print(error) } } func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool){ print(flag) print("here") if flag == true{ } } }


para Swift 4

func play(url: UR) { let item = AVPlayerItem(URL: url) NotificationCenter.default.addObserver(self, selector: #selector(self.playerDidFinishPlaying(sender:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: item) let player = AVPlayer(playerItem: item) player.play() } @objc func playerDidFinishPlaying(sender: Notification) { // Your code here }


AVAudioPlayerDelegate crear un objeto que implemente el protocolo AVAudioPlayerDelegate y usarlo como delegado del objeto AVAudioPlayer . Luego vincúlalas, por ejemplo:

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

El delegado puede implementar métodos que respondan a ciertos eventos. Este se dispara cuando el audio termina de reproducirse:

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


import AVFoundation var AVPlayerCustom:AVAudioPlayer = AVAudioPlayer() class PlayerModule: NSObject, AVAudioPlayerDelegate { func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { print("Finish") } func playWithData(data: Data, proc: Int) { //print(data) do { AVPlayerCustom = try AVAudioPlayer(data: data) AVPlayerCustom.delegate = self as! AVAudioPlayerDelegate AVPlayerCustom.prepareToPlay() AVPlayerCustom.play() } catch { print("error1") } } }