You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用UITapGestureRecognizer实现音频播放/暂停功能

解决UITapGestureRecognizer点击切换音频播放/停止的问题

我帮你梳理下怎么实现单次点击切换音频播放、停止甚至重播的功能,核心就是要保留音频播放器的全局引用,然后在点击事件里判断当前的播放状态:

第一步:准备工作

首先得导入AVFoundation框架,然后在你的ViewController里声明一个可选的AVAudioPlayer属性,用来持久化播放器实例:

import AVFoundation

class YourViewController: UIViewController {
    // 全局音频播放器实例
    private var audioPlayer: AVAudioPlayer?
    
    // ... 你的其他代码(比如视图加载逻辑)
}

第二步:修改点击事件方法

接下来修改你的page1Tapped方法,加入状态判断逻辑:

@IBAction func page1Tapped(_ sender: UITapGestureRecognizer) {
    // 先判断当前播放器是否正在播放
    if let existingPlayer = audioPlayer, existingPlayer.isPlaying {
        // 如果正在播放,就停止并重置播放器
        existingPlayer.stop()
        audioPlayer = nil // 重置实例,方便下次重新播放
    } else {
        // 加载Bundle里的音频文件
        guard let audioURL = Bundle.main.url(forResource: "Opening Solo", withExtension: "mp3") else {
            print("⚠️ 找不到指定的音频文件,请检查文件名和扩展名是否正确")
            return
        }
        
        do {
            // 初始化播放器并播放
            audioPlayer = try AVAudioPlayer(contentsOf: audioURL)
            audioPlayer?.play()
        } catch {
            print("❌ 初始化音频播放器失败:\(error.localizedDescription)")
        }
    }
}

一些额外提示

  • 记得把代码里的mp3替换成你实际的音频文件扩展名(比如wav、m4a等)
  • 如果希望音频播放完毕后,再次点击能直接重播,上面的逻辑已经支持了——因为播放完毕后isPlaying会变成false,下次点击会重新初始化播放器并播放
  • 如果需要更精细的控制(比如播放进度、循环播放),可以给audioPlayer设置numberOfLoops属性,或者实现AVAudioPlayerDelegate监听播放完成事件

内容的提问来源于stack exchange,提问作者Terry B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:12:32