【问题标题】:AVAudioplayer no resetting on viewDidAppearAVAudioplayer 在 vi​​ewDidAppear 上没有重置
【发布时间】:2018-02-19 02:48:08
【问题描述】:

这个想法很简单,我认为过去没有提出过这个问题。 我想制作一个简单的 mp3 播放器。

  • 一些歌曲显示在用户选择歌曲的收藏视图中
  • 切换到另一个视图,仅提供播放、暂停或停止选项 是当您返回主屏幕选择一首新歌曲时 目前还在玩。无法停用当前 播放器。当您需要播放 2 首歌曲时,2 首歌曲一起播放

我尝试了很多东西 - 创建一个新的播放器实例 (player = AVAudioPlayer()) - player.pause() 和 player.play() 我真的看不出我做错了什么。

这是我的代码:

导入 UIKit 导入 AVFoundation

类 LecteurViewController: UIViewController {

var chansonSelected: Chanson? = nil
var lecteur:AVAudioPlayer = AVAudioPlayer()
var timer1 = Timer()
var timer2 = Timer()
@IBOutlet weak var dureeChansonSlider: UISlider!
@IBOutlet weak var chansonImageView: UIImageView!
@IBOutlet weak var chansonVolumeSlider: UISlider!
@IBOutlet weak var debutLabel: UILabel!
@IBOutlet weak var finLabel: UILabel!

@IBAction func stopMusicAction(_ sender: UIBarButtonItem) {
    var player = AVAudioPlayer()
    lecteur.stop()
    LecteurManager.isActive = false
}

@IBAction func pauseMusicAction(_ sender: UIBarButtonItem) {
    var player = AVAudioPlayer()
    lecteur.pause()
    LecteurManager.isActive = false
}

@IBAction func jouerMusicAction(_ sender: UIButton) {

    if LecteurManager.isActive {
        changeSong()
        print("lecteur déjà en cours")
    } else {
        var player = AVAudioPlayer()
        lecteur.play()
    }

    print(LecteurManager.isActive )
    LecteurManager.isActive = true
}

func changeSong() {
    lecteur.stop()
    //lecteur = AVAudioPlayer()

    jouerLecteurMp3()
    print(chansonSelected!)
    lecteur.play()
}



override func viewDidLoad() {
    super.viewDidLoad()
    configureView()
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    jouerLecteurMp3()
}

func configureView() {

    self.title = (chansonSelected!.titre!).capitalized
    chansonImageView.image = UIImage(named: "\(chansonSelected!.image).jpgs")

    //formatter 'back' button
    let backBtn = UIBarButtonItem(title: "< Playlist", style: .plain, target: self, action: #selector(LecteurViewController.reset(_sender:)))

    self.navigationItem.leftBarButtonItem = backBtn
    self.navigationController?.navigationBar.tintColor = UIColor.white

    //contrôler volume chanson
    chansonVolumeSlider.addTarget(self, action: #selector(LecteurViewController.ajusterVolume(_ :)), for: UIControlEvents.valueChanged)

    //contrôler durée chanson
    dureeChansonSlider.addTarget(self, action: #selector(LecteurViewController.ajusterDurée(_ :)), for: UIControlEvents.valueChanged)

    updateUI()
}

func updateUI() {
    //indiquer position chanson
    timer1 = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(LecteurViewController.mettreAJourDurée), userInfo: nil, repeats: true)

    //afficher durée chanson
    timer2 = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(LecteurViewController.afficherDurée), userInfo: nil, repeats: true)
}

func reset(_sender:UIBarButtonItem) {
    self.navigationController?.popViewController(animated: true)
}

func ajusterVolume(_ sender:UISlider) {
    //print("volume ajusté \(chansonVolumeSlider.value)")
    lecteur.volume = chansonVolumeSlider.value
}

func ajusterDurée(_ sender:UISlider) {
    lecteur.currentTime = TimeInterval(dureeChansonSlider.value)
}

func mettreAJourDurée() {
    dureeChansonSlider.value = Float(lecteur.currentTime)
}

func afficherDurée() {
    print("durée actuelle: \(lecteur.duration - lecteur.currentTime)")
    debutLabel.text = retournerPositionActuelle()
    finLabel.text = retournerDureeTotal()

}

func retournerPositionActuelle() -> String {
    let seconds = Int(lecteur.currentTime) % 60
    let minutes = (Int(lecteur.currentTime) / 60) % 60

    return String(format: "%0.2i:%0.2i", minutes, seconds)
}

func retournerDureeTotal() -> String {
    let seconds = Int(lecteur.currentTime) % 60
    let minutes = (Int(lecteur.currentTime) / 60) % 60
    return String(format: "%0.2i:%0.2i", minutes, seconds)
}

func jouerLecteurMp3() {
    let chanson = "bensound-\(chansonSelected!.titre!)"
    let fichierMp3 = Bundle.main.path(forResource: chanson, ofType: "mp3")

    do {
        try lecteur = AVAudioPlayer(contentsOf: URL(string: fichierMp3!)!)
        dureeChansonSlider.maximumValue = Float(lecteur.duration)

    } catch {
        print("erreur lecture mp3")
    }
}

}

【问题讨论】:

    标签: swift ios11


    【解决方案1】:

    试试这个:

    func reset(_sender:UIBarButtonItem) 
    {
        self.navigationController?.popViewController(animated: true)
        lecteur.stop()
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-10
      • 1970-01-01
      • 2019-03-10
      • 2015-02-04
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 2018-03-16
      • 2010-11-14
      相关资源
      最近更新 更多