Justin
Justin

Reputation: 147

(iOS) Action when music file stops

When I open a view the music starts playing using AVFoundation and then when it finishes, how do I create an action when it stops? So when the music file finishes, I want the "Pause" button turn into "Play". I know already how to change the text programmatically by using btnPausePlay.setTitle("Pause", forState: UIControlState.Normal)but how do I create the function when the music stops playing?

Note: I'm using swift

Upvotes: 0

Views: 513

Answers (1)

Dharmesh Kheni
Dharmesh Kheni

Reputation: 71854

You can use delegate functions for that and here is your complete code:

import UIKit
import AVFoundation

class ViewController: UIViewController, AVAudioPlayerDelegate {

    var player = AVAudioPlayer()

    @IBOutlet weak var musicSlider: UISlider!
    @IBOutlet weak var btnPausePlay: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        musicSlider.value = 0.0
        music()
    }

    func updateMusicSlider(){

        musicSlider.value = Float(player.currentTime)
    }

    @IBAction func sliderAction(sender: AnyObject) {

        player.stop()
        player.currentTime = NSTimeInterval(musicSlider.value)
        player.play()
    }

    func music(){

        var audioPath = NSBundle.mainBundle().pathForResource("1", ofType: "mp3")!
        var error : NSError? = nil
        player = AVAudioPlayer(contentsOfURL: NSURL(string: audioPath), error: &error)
        musicSlider.maximumValue = Float(player.duration)
        var timer = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: Selector("updateMusicSlider"), userInfo: nil, repeats: true)
        player.delegate = self
        if error == nil {
            player.delegate = self
            player.prepareToPlay()
            player.play()
        }
    }
    //This delegate method will call when your player finish playing. 
    func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool)
    {
        btnPausePlay.setTitle("Play", forState: .Normal)
    }

}

And HERE is your sample project for more Info.

Upvotes: 1

Related Questions