как запустить индикатор выполнения, пока не остановится фоновое воспроизведение звука - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю над аудиоплеером, где мне нужно разрешить воспроизводить звук в фоновом режиме, я закончил аудиосеансы, но застрял в индикаторе выполнения, когда воспроизводю аудио в фоновом режиме, и снова открою приложение, индикатор выполнения итаймер остановлен, мне нужно запустить их также в фоновом режиме.я имею в виду индикатор выполнения должен обновляться с таймером, если я перехожу к другим представлениям или минимизирую приложение.

 @IBAction func btnPlayMusicAction(_ sender: Any)
{
    if isPlaying == false {
        self.btnPlayMusicPro.setImage(#imageLiteral(resourceName: "PauseIcon"), for: .normal)
        self.isPlaying = true
        self.audioPlayer?.play()
        timer = Timer.scheduledTimer(timeInterval:1.0, target: self,selector: (#selector(updateRemainingTime)), userInfo: nil, repeats:true)



    }else{
        self.btnPlayMusicPro.setImage(#imageLiteral(resourceName: "PlayIcon"), for: .normal)
        self.isPlaying = false
        if (audioPlayer?.isPlaying)!{
            self.audioPlayer?.pause()
        }
        self.timer?.invalidate()



    }
}

ее метод updateRemainingTime ()

    @objc func updateRemainingTime(){
    let currentTime =   Int((audioPlayer?.currentTime)!)
    let duration = Int((audioPlayer?.duration)!)
    let seconds = currentTime % 60
    let minutes = (currentTime / 60) % 60
    let hours = (currentTime / 3600)

    var remainingTime:String = ""
    if currentTime >= 3600{
        remainingTime = String(format: "%02d:%02d:%02d", hours, minutes, seconds)
    }else{
        remainingTime = String(format: "%02d:%02d", minutes, seconds)
    }

    self.lblPlayMusicTimePro.text = remainingTime
    Tray.remainingAudioTime = remainingTime

    if currentTime  == duration-1{
        timer?.invalidate()

        if (audioPlayer?.isPlaying)!{
            self.audioPlayer?.currentTime = 0
            self.audioPlayer?.stop()
        }
        self.btnPlayMusicPro.setImage(#imageLiteral(resourceName: "PlayIcon"), for: .normal)
        self.isPlaying = false
        self.musicProgressViewPro.setProgress(0.0, animated: true)
        self.lblPlayMusicTimePro.text = "00:00"
        self.lblMusicTimePro.text = "00:00"
    }else {
        let currentProgress = Float((audioPlayer?.currentTime)! / (audioPlayer?.duration)!)
        Tray.progressTime = currentProgress
        self.musicProgressViewPro.setProgress(currentProgress, animated: true)

    }
}
...