当在Swift中使用AVAudioPlayer(AVFoundation)播放声音时,停止使用Timer进行动画播放

时间:2018-06-01 08:26:35

标签: ios swift

当ViewController调用播放音效的方法时,使用定时器的动画停止片刻(声音正常播放)。
在这种情况下,当您触摸叶子图像时,声音(tap.mp3)会正常播放但是动画会停止片刻。

为什么动画会停止?我该如何解决?

        //move blue and purple to the second row
            if (winsize < 1600) {
                if (i === 0) {
                    $(this.items[i]).css('transform', `translate(${ winsize/2 - 1.5*grow}px, 170px)`)
                }
                if(i === this.items.length - 1) {

                $(this.items[i]).css('transform', `translate(${ -1*(winsize/2 - 1.5*grow)}px, 170px)`)
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

我认为问题是因为AVAudioPlayer(contentsOf: audioFileURL!)阻止了用户界面并且暂时让动画延迟

要修复它,您可以尝试在后台队列上创建AVAudioPlayer,然后在主队列上播放

func playSE(se: String) {
  DispatchQueue.global(qos: .background).async {
    let audioFileURL = Bundle.main.url(forResource: se, withExtension: "mp3")

    do {
      try sePlayer = AVAudioPlayer(contentsOf: audioFileURL!)
    } catch let error {
      print(error.localizedDescription)
    }

    DispatchQueue.main.async {
      sePlayer?.play()
    }
  }
}