【发布时间】:2018-08-22 18:03:34
【问题描述】:
我有一个名为 PlayerController 的视图控制器,当我转到 PlayerController 时,它会加载一个音频文件并将其放入 AVAudioPlayer 中,它们是一个播放按钮,用于播放 AVAudioPlayer。到目前为止,一切都很好。问题是如果我离开 PlayerController 并再次转到它,来自前一个 AVAudioPlayer 的音频仍在播放,在我的 viewWillAppear 方法中,我有这条线来阻止 AVAudioPlayer 播放,但它不起作用,它不会停止前一个AVAudioPlayer 从播放....我将如何完成我想要做的事情?我应该在我的 appDelegate 文件中定义 AVAudioPlayer 并从他们的文件中读取它吗?
这是我的 viewWillAppear 方法:
override func viewWillAppear(_ animated: Bool)
{
super.viewWillAppear(animated)
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: (#selector(PlayerController.updateTimer)), userInfo: nil, repeats: true)
if(UserDefaults.standard.integer(forKey: "nowPlayingPost") == 0)
{
UserDefaults.standard.set(self.postid, forKey: "nowPlayingPost")
audioSlider.setValue(0, animated: false)
if(self.audio != nil && (self.audio?.isPlaying)!)
{
self.audio?.stop()
}
}
else
{
audioSlider.value = Float((self.audio?.currentTime)!)
self.audioSlider.maximumValue = Float((self.audio?.duration)!)
self.postid = UserDefaults.standard.integer(forKey: "nowPlayingPost")
if(self.audio?.isPlaying)!
{
self.playButton.setTitle("Stop", for: .normal)
}
else
{
if(self.audio?.currentTime == 0)
{
self.playButton.setTitle("Play", for: .normal)
}
else
{
self.playButton.setTitle("Resume", for: .normal)
}
}
}
Alamofire.request(audioUrl!).responseData { response in
do {
self.audio = try AVAudioPlayer(data: response.data!)
self.audio?.prepareToPlay()
self.audioSlider.maximumValue = Float((self.audio?.duration)!)
}catch{
}
}
}
那么我应该在 appDelegate 中定义 AVAudioPlayer 还是使用 UserDefaults 或 CoreData 或其他什么?这方面的最佳做法是什么?
【问题讨论】:
标签: ios swift avfoundation avaudioplayer