【发布时间】:2017-10-20 20:28:44
【问题描述】:
我正在使用一个名为 AudioManager 的课程,您可以找到它作为这个问题的答案 here。
它具有委托方法AVAudioPlayerDelegate 作为AudioManager 类的扩展。
有没有办法在我的视图控制器中使用或覆盖这些委托方法,以便能够更改我的 UI 中的属性。 这是扩展名:
extension AudioManager: AVAudioPlayerDelegate {
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer,
successfully flag: Bool) {
player.stop()
print("Finish Playing")
}
func audioPlayerDecodeErrorDidOccur(_ player: AVAudioPlayer,
error: Error?) {
print(/error?.localizedDescription)
}
}
这是我的 viewcontroller 播放按钮代码:
@IBAction func playButtonTapped(_ sender: UIButton) {
if AudioManager.shared.player == nil {
if recordFilePath != nil {
AudioManager.shared.setupPlayer(URL(string:recordFilePath)!)
}
}
if playButtonIsChecked {
playButtonIsChecked = false
AudioManager.shared.player?.play()
playRecordButton.setBackgroundImage(#imageLiteral(resourceName: "pauseProfileButton"), for: .normal)
} else {
playRecordButton.setBackgroundImage(#imageLiteral(resourceName: "editProfilePlay"), for: .normal)
playButtonIsChecked = true
AudioManager.shared.player?.stop()
}
上面的代码很好,当我调用player?.stop() 时,AVAudioPlayerDelegate 方法是从AudioManager 类调用的,但是当音频文件结束并停止时,我没有调用player?.stop 按钮背景图像当然不会改变。
我如何在我的视图控制器中使用这个委托方法并知道我的音频文件何时结束并停止。
【问题讨论】:
标签: swift class delegates avfoundation