我的背景音乐会播放两次(同时)

时间:2016-04-05 22:16:44

标签: ios swift viewdidload

当我启动我的应用程序时,开始播放背景音乐。但是当我按下开始并播放游戏(在另一个视图控制器中)然后返回菜单(第一个视图控制器)时,歌曲再次开始,但同一首歌仍在播放(结果=同时听到两次)。很烦人。这是我的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")
        }
  }
}

2 个答案:

答案 0 :(得分:0)

只需再次调用

myAudioPlayer.play,因为VC再次运行viewDidLoad()方法。

我的想法:

声明变量

var x = false

下一步 - 在你的音频播放器上制作一个条件。

if x == false { // your code here }

当从其他VC触发Segue时尝试使用prepareForSegue方法。

所以在第二个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,音乐不会再次运行。

答案 1 :(得分:0)

这一切都取决于你想要的功能。

如果您只想在屏幕上显示菜单视图控制器时播放背景音乐,您可以在视图控制器上创建文件名和播放器变量属性,然后在viewWillAppear中

Player.play

然后当用户离开页面时,停止在viewDidDissappear函数中播放。

如果您希望音乐始终在后台播放,则可能值得为其创建自己的类并在应用委托上提供sharedInstance,以便您可以在整个应用程序中管理播放器的单个实例。