这似乎是一个相当简单的任务,但是已经尝试了一段时间来弄清楚...我已经设置了一个UITapGestureRecognizer来播放捆绑中的音频文件。这很好用,但我希望用户能够再次点击该项目并停止音频。基本上能够通过单击轻击对象来启动和重放音频。
@IBAction func page1Tapped(_ sender: UITapGestureRecognizer) {
let url:URL = Bundle.main.url(forResource: "Opening Solo", withExtension: "mp3")!
do {
audioPlayer = try AVAudioPlayer(contentsOf: url, fileTypeHint: nil)
} catch {
return
}
audioPlayer.prepareToPlay()
audioPlayer.play()
if audioPlayer.isPlaying {
audioPlayer.stop()
} else {
audioPlayer.play()
}
}
这是我创建的功能。音频只播放,只需在此时每次点击重新开始。
非常感谢任何帮助!!
答案 0 :(得分:3)
这是因为每次点击都会创建一个新的重新分配旧实例,你可以将播放器声明为实例变量
var audioPlayer:AVAudioPlayer?
并在分配
之前检查它的值 if audioPlayer == nil
{
audioPlayer = try AVAudioPlayer(contentsOf: url, fileTypeHint: nil)
audioPlayer.play()
}
else
{
if audioPlayer.isPlaying {
audioPlayer.stop()
} else {
audioPlayer.play()
}
}