我有AVAudioPlayer。在第一个会话中(当用户暂停音频时)我想保存已经过的音轨时间和持续时间。并开始在下一个会话中播放保存的时间(例如在iBooks应用程序中)。最好的方法是什么?
我的代码以标签显示时间
@IBOutlet var timeElapsed: UILabel!
@IBOutlet var timeDuration: UILabel!
@IBAction func play(sender: AnyObject) {
if !audioPlayer.isPlaying{
audioPlayer.play()
slider.maximumValue = Float(audioPlayer.duration)
slider.value = 0.0
timer = Timer(timeInterval: 0.0, target: self, selector: #selector(self.updateTime), userInfo: nil, repeats: true)
RunLoop.main.add(timer!, forMode: .commonModes)
}
func updateTime() {
let currentTime = Int(audioPlayer.currentTime)
let minutes = currentTime/60
let seconds = currentTime - minutes * 60
let durationTime = Int(audioPlayer.duration) - Int(audioPlayer.currentTime)
let minutes1 = durationTime/60
let seconds1 = durationTime - minutes1 * 60
timeElapsed.text = NSString(format: "%02d:%02d", minutes,seconds) as String
timeDuration.text = NSString(format: "-%02d:%02d", minutes1,seconds1) as String
}
答案 0 :(得分:0)
您可以使用NSUserDefaults在多个应用启动时保存信息。
当用户点击暂停按钮时,您可以将AudioSession的经过时间和持续时间保存到NSUserDefaults,如下所示:
func pauseClick()
{
if audioPlayer.isPlaying
{
UserDefaults.standard.set(player.currentTime, forKey: "ElapsedDuration")
UserDefaults.standard.set(player.duration, forKey: "TotalDuration")
UserDefaults.standard.synchronize()
audioPlayer.pause();
}
}
每当你开始下一个会话时,只需通过调用这些方法从userDefaults获取信息。
func setUpNewAudioPlayer()
{
let player:AVAudioPlayer = AVAudioPlayer()
//before setting current time, make sure you set URL for player
player.currentTime = self.getElapsedDuration()
}
func getTotalDuration() -> (TimeInterval)
{
let timeInterval = UserDefaults.standard.value(forKey: "TotalDuration")
return timeInterval != nil ? timeInterval as! TimeInterval : 0
}
func getElapsedDuration() -> (TimeInterval)
{
let timeInterval = UserDefaults.standard.value(forKey: "ElapsedDuration")
return timeInterval != nil ? timeInterval as! TimeInterval : 0
}
这会起作用!!
答案 1 :(得分:-1)