我的背景音乐被播放了两次(同时)
My background music gets played twice (at the same time)
当我启动我的应用程序时,背景音乐开始播放。但是当我按下开始并玩游戏(在另一个 viewcontroller 中)然后返回菜单(第一个视图控制器)时,歌曲再次开始播放,但同一首歌仍在播放(结果 = 在同时)。非常烦人。这是我的 viewDidLoad 函数(可能是我的问题所在)。有人可以帮助我(通过解释或提供代码)仅在第一次加载视图时播放音乐吗?
override func viewDidLoad() {
super.viewDidLoad()
// get path of audio file
let myFilePathString = NSBundle.mainBundle().pathForResource("Background Music Loop (Free to Use)", ofType: "mp3")
if let myFilePathString = myFilePathString {
let myFilePathURL = NSURL(fileURLWithPath: myFilePathString)
do { try myAudioPlayer = AVAudioPlayer(contentsOfURL: myFilePathURL)
myAudioPlayer.play()
myAudioPlayer.numberOfLoops = -1
}catch{
print("error")
}
}
}
myAudioPlayer.play
将再次调用,因为 VC 运行 再次调用 viewDidLoad()
方法。
我的想法:
声明一个变量
var x = false
下一步 - 为您的音频播放器设置播放条件。
if x == false { // your code here }
从另一个 VC 触发 Segue 时尝试使用 prepareForSegue
方法。
所以 第 2 ViewController
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if segue.identifier == "yourIdentifier" {
let destinationController = segue.destinationViewController as! // Controller Name here
destinationController.x = true
}
}
这会将 x 设置为 true 并且音乐不会再次 运行。
这完全取决于您想要的功能。
如果您只想在屏幕上显示菜单视图控制器时播放背景音乐,您可以在视图控制器上设置文件名和播放器变量属性,然后在 viewWillAppear 中执行
Player.play
然后当用户离开页面时,在 viewDidDissappear 函数中停止播放。
如果您希望音乐始终在后台播放,那么可能值得为它创建自己的 class 并在应用委托上提供一个 sharedInstance,以便您可以管理播放器的单个实例在整个申请过程中。
当我启动我的应用程序时,背景音乐开始播放。但是当我按下开始并玩游戏(在另一个 viewcontroller 中)然后返回菜单(第一个视图控制器)时,歌曲再次开始播放,但同一首歌仍在播放(结果 = 在同时)。非常烦人。这是我的 viewDidLoad 函数(可能是我的问题所在)。有人可以帮助我(通过解释或提供代码)仅在第一次加载视图时播放音乐吗?
override func viewDidLoad() {
super.viewDidLoad()
// get path of audio file
let myFilePathString = NSBundle.mainBundle().pathForResource("Background Music Loop (Free to Use)", ofType: "mp3")
if let myFilePathString = myFilePathString {
let myFilePathURL = NSURL(fileURLWithPath: myFilePathString)
do { try myAudioPlayer = AVAudioPlayer(contentsOfURL: myFilePathURL)
myAudioPlayer.play()
myAudioPlayer.numberOfLoops = -1
}catch{
print("error")
}
}
}
myAudioPlayer.play
将再次调用,因为 VC 运行 再次调用 viewDidLoad()
方法。
我的想法:
声明一个变量
var x = false
下一步 - 为您的音频播放器设置播放条件。
if x == false { // your code here }
从另一个 VC 触发 Segue 时尝试使用 prepareForSegue
方法。
所以 第 2 ViewController
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if segue.identifier == "yourIdentifier" {
let destinationController = segue.destinationViewController as! // Controller Name here
destinationController.x = true
}
}
这会将 x 设置为 true 并且音乐不会再次 运行。
这完全取决于您想要的功能。
如果您只想在屏幕上显示菜单视图控制器时播放背景音乐,您可以在视图控制器上设置文件名和播放器变量属性,然后在 viewWillAppear 中执行
Player.play
然后当用户离开页面时,在 viewDidDissappear 函数中停止播放。
如果您希望音乐始终在后台播放,那么可能值得为它创建自己的 class 并在应用委托上提供一个 sharedInstance,以便您可以管理播放器的单个实例在整个申请过程中。