这是我正在使用的代码:
do {
// Music BG
let resourcePath = NSBundle.mainBundle().pathForResource("MusicaBg", ofType: "wav")!
let url = NSURL(fileURLWithPath: resourcePath)
try musicPlayer = AVAudioPlayer(contentsOfURL: url)
// SFX for Button
let resourcePath2 = NSBundle.mainBundle().pathForResource("botaoApertado", ofType: "wav")!
let url2 = NSURL(fileURLWithPath: resourcePath2)
try botaoApertado = AVAudioPlayer(contentsOfURL: url2)
} catch let err as NSError {
print(err.debugDescription)
}
最好的方法是什么?
答案 0 :(得分:1)
你可能正在寻找Singleton pattern,因为你需要一个单一的规范背景音乐实例,任何ViewController都可以与之交互。
然后,只要您需要更改音乐,您就可以调用相应的方法。 AudioManager.sharedInstance
来自任何地方,随着您不断浏览应用,音乐将继续播放。
您可能希望在AppDelegate或FirstViewController中启动音乐。
例如,使用您提供的代码,您可能需要类似
的内容class AudioManager {
static let sharedInstance = AudioManager()
var musicPlayer: AVAudioPlayer?
var botaoApertado: AVAudioPlayer?
private init() {
}
func startMusic() {
do {
// Music BG
let resourcePath = NSBundle.mainBundle().pathForResource("MusicaBg", ofType: "wav")!
let url = NSURL(fileURLWithPath: resourcePath)
try musicPlayer = AVAudioPlayer(contentsOfURL: url)
// SFX for Button
let resourcePath2 = NSBundle.mainBundle().pathForResource("botaoApertado", ofType: "wav")!
let url2 = NSURL(fileURLWithPath: resourcePath2)
try botaoApertado = AVAudioPlayer(contentsOfURL: url2)
} catch let err as NSError {
print(err.debugDescription)
}
}
}
func stopMusic() { // implementation
}
一旦你写AudioManager.sharedInstance.startMusic()
,sharedInstance
静态变量就会被初始化(一次,因为它是一个静态属性)然后会在它上面调用startMusic()
。
如果您稍后致电AudioManager.sharedInstance.stopMusic()
,它将使用之前初始化的sharedInstance
,并停止播放音乐。
发表评论中的任何问题。