所以我一直在尝试将 BGM 添加到我的应用程序中,它有效,但每当我切换到另一个 View 然后再切换回来时,它都会再次对 BGM 进行分层。 我尝试过谷歌搜索,发现其他人也有同样的问题, 我被困在这里的唯一一点是我不是用 Objective-C 编码,而是用 Swift 编码,除了一大堆 Taylor Swift 之外,我找不到解决方案 D:
以下是我用来编写BGM的代码。
import UIKit
import AVFoundation
class ViewController: UIViewController {
var ButtonSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("tamborine", ofType: "wav")!)
var audioPlayer = AVAudioPlayer()
/* var Bgm = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Waiting-in-the-Woods", ofType: "mp3")!), error: nil) */
func playBgMusic(){
let musicPath = NSBundle.mainBundle().pathForResource("Waiting-in-the-Woods", ofType: "mp3")
let url = NSURL(fileURLWithPath: musicPath!)
audioPlayer = AVAudioPlayer(contentsOfURL: url, error: nil)
audioPlayer.numberOfLoops = -1
//-1為循環播放
audioPlayer.volume = 1
audioPlayer.prepareToPlay()
audioPlayer.play()
}
override func viewDidLoad() {
super.viewDidLoad()
audioPlayer = AVAudioPlayer(contentsOfURL: ButtonSound, error: nil)
//Bgm.play()
}
override func viewWillAppear(animated: Bool) {
playBgMusic()
if !audioPlayer.playing {
audioPlayer.play()
}
}
最佳答案
在 viewWillAppear 中,您调用 playBgMusic(),后者又调用 audioPlayer.play()
因此,轨道重新开始这一事实是有道理的,因为这就是您要求它执行的操作。我认为您需要的逻辑类似于以下内容。
if !audioPlayer.playing {
playBgMusic()
}
或者如果你喜欢保护声明
guard player.playing else {
playBgMusic()
}
关于ios - 在后台播放音乐并切换 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36745723/