Swift - 如何通过单击相同的按钮暂停播放音频?

时间:2016-10-18 01:15:26

标签: ios swift audio pause

所以我有一个音频文件列表,当按下一个单元格时,它会播放音频。这样可以正常工作但我无法通过再次单击同一个单元来暂停它。

表格视图的代码:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
    let a = indexPath.section;
    let b = indexPath.row;

    var path = NSBundle.mainBundle().pathForResource(musicArray[b], ofType: "mp3")
    var error:NSError?

    do{
        audioPlayer = try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: path!))
    }
    catch
    {
        print("Something bad happened")
    }

    if (audioPlayer.playing)
    {
        audioPlayer.pause();
    }
    else
    {
        audioPlayer.play();
    }
}

musicArray具有音频文件的标题

2 个答案:

答案 0 :(得分:1)

每次选择单元格时,您都会创建一个新的AVAudioPlayer。您需要保留对前一个的引用,并告诉音频播放器暂停。

答案 1 :(得分:0)

您可以创建单个对象。

import AVFoundation
class SomeAudioManager: NSObject, AVAudioPlayerDelegate
{
    class var sharedInstance: SomeAudioManager {
        struct Static {
            static var onceToken: dispatch_once_t = 0
            static var instance: SomeAudioManager? = nil
        }
        dispatch_once(&Static.onceToken) {
            Static.instance = SomeAudioManager()
        }
        return Static.instance!
    }
    func audioView(songname: String,format: String) {
        let audioPlayer: AVAudioPlayer

        do {
            audioPlayer = try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(songname, ofType:format)!), fileTypeHint: AVFileTypeMPEGLayer3)
            audioPlayer.delegate = self;
            audioPlayer.play()
        } catch {
            // error
        }
    }
}

它将通过整个应用程序活着。

How to implement AVAudioPlayer Inside Singleton Method?

你可以创建一个玩家单身,这样你就可以随时知道它是否在玩。