Ios 跨多个场景使用AVAudioPlayer可以快速调整音量

Ios 跨多个场景使用AVAudioPlayer可以快速调整音量,ios,swift,avfoundation,Ios,Swift,Avfoundation,嗨,我想知道是否有一种方法可以在多个场景中使用AVAudioPlayer并更改音量。我目前将其放置在gameViewController中,该控制器是我应用程序所有场景的控制器: override func viewDidAppear(animated: Bool) { let backgroundMusicURL = NSBundle.mainBundle().URLForResource("tempMusic.mp3", withExtension: nil) backgro

嗨,我想知道是否有一种方法可以在多个场景中使用AVAudioPlayer并更改音量。我目前将其放置在gameViewController中,该控制器是我应用程序所有场景的控制器:

override func viewDidAppear(animated: Bool) {
    let backgroundMusicURL = NSBundle.mainBundle().URLForResource("tempMusic.mp3", withExtension: nil)
    backgroundMusicPlayer = AVAudioPlayer(contentsOfURL: backgroundMusicURL, error:nil)
    backgroundMusicPlayer.numberOfLoops = -1
    backgroundMusicPlayer.prepareToPlay();
    backgroundMusicPlayer.play();
}

这是预期的效果,但我无法控制场景本身的音量


那么,有没有办法播放背景音乐,使其在多个场景中平稳运行,并且音量仍然可以在这些场景中调节?

您应该能够通过以下方式访问viewController:

self.view?.window?.rootViewController

也就是说,它不被推荐,因为它打破了MVC模式。

好的,我使用Matt提供的链接实现了它,所以这篇文章的未来观众投票支持他的评论

if let vc = UIApplication.sharedApplication().keyWindow?.rootViewController as? GameViewController{
   vc.setMusicVolume(Float(hexData.musicVolume)/100.0);
}

现在,我从场景本身中访问rootViewController。作为预防措施,我将其放在if语句中。

但我无法控制其在场景中的音量,为什么您不能这样做?BackgroundMusicLayer可能是一个实例属性;您应该能够从任何地方获取对它的引用并设置其音量。backgroundMusicPlayer是我的gameviewcontroller的属性。这意味着没有任何场景可以访问此实例属性。确实可以。他们为什么不呢?它们之间有某种联系。获取实例引用的问题是iOS编程的全部艺术。我不能告诉你如何解决这个问题,因为我不知道它们之间的关系。但你知道!但我可以向你们指出我对这个一般性话题的讨论,这里:这里:让你们知道我没有放弃你们的帮助。我目前正在浏览您提供的不同URL和解决方案。这是如何打破MVC的?这和MVC有什么关系?你可以在48小时后接受自己的答案?。完全合法和良好的公民身份。