首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVFoundation委派

AVFoundation委派
EN

Stack Overflow用户
提问于 2015-09-22 03:45:29
回答 1查看 236关注 0票数 0

我正在尝试播放不同的声音文件,并希望在其中一个声音文件播放完成时收到通知。所以我集成了委托方法:

代码语言:javascript
复制
extension ViewController: AVAudioPlayerDelegate {
    func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {

        if (player.url!.isEqual(self.sndAlgo1)) {
            self.audioController.audioPlayer!.stop()
            self.lblInstruction.text = "Alarmieren Sie den Notruf"
        }

        if (player.url!.isEqual(self.sndNotruf)) {
            self.audioController.audioPlayer!.stop()
            self.lblInstruction.text = "Notruf wurde abgesetzt"
        }
    }
}

为了调用soundfiles,我为每个soundfiles创建了一个属性:

代码语言:javascript
复制
var sndAlgo1 = NSURL(string: "")!
var sndAlgo2 = NSURL(string: "")!
var sndNotruf = NSURL(string: "")!

func initializeSounds() {
    self.sndAlgo1 = self.audioController.createAudioFilePath("Algo1", type: "mp3")
    self.sndAlgo2 = self.audioController.createAudioFilePath("Algo2", type: "mp3")
    self.sndNotruf = self.audioController.createAudioFilePath("Notruf", type: "mp3")
}

override func viewDidAppear(animated: Bool) {
    self.audioController.audioPlayer?.delegate = self
    self.audioController.startAudioPlayerWithURL(self.sndAlgo1)
}

@IBAction func btnEmergencyPressed(sender: UIButton) {
    self.lblInstruction.text = "Bitte warten"
    self.audioController.startAudioPlayerWithURL(self.sndNotruf)
}

声音播放正常,但委托方法仅被调用一次。我会猜到它是在每次使用播放器之后调用的。我是不是用错了方法?

最好的

EN

回答 1

Stack Overflow用户

发布于 2015-09-22 03:56:56

我猜您的方法startAudioPlayerWithURL创建了一个新的AVAudioPlayer实例。

每次创建新实例时,都需要设置AVPlayer的委托。

您的代码将如下所示:

代码语言:javascript
复制
var sndAlgo1 = NSURL(string: "")!
var sndAlgo2 = NSURL(string: "")!
var sndNotruf = NSURL(string: "")!

func initializeSounds() {
    self.sndAlgo1 = self.audioController.createAudioFilePath("Algo1", type: "mp3")
    self.sndAlgo2 = self.audioController.createAudioFilePath("Algo2", type: "mp3")
    self.sndNotruf = self.audioController.createAudioFilePath("Notruf", type: "mp3")
}

override func viewDidAppear(animated: Bool) {
    self.audioController.startAudioPlayerWithURL(self.sndAlgo1)
    self.audioController.audioPlayer?.delegate = self
}

@IBAction func btnEmergencyPressed(sender: UIButton) {
    self.lblInstruction.text = "Bitte warten"
    self.audioController.startAudioPlayerWithURL(self.sndNotruf)
    self.audioController.audioPlayer?.delegate = self
}

我不确定它是否有效,因为我不知道你的startAudioPlayerWithURL方法是做什么的。

要改进代码,可以将委托赋予audioController,并在每次调用startAudioPlayerWithURL时重用它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32703315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档