gpt4 book ai didi

ios - AVAudioPlayer 在 segue 之后继续播放并在返回原始 View Controller 时重新启动 - 我该如何停止它?

转载 作者:可可西里 更新时间:2023-11-01 00:59:22 25 4
gpt4 key购买 nike

AVAudioPlayer 有一个奇怪的小问题,我找不到很好的解决方案。我正在使用以下功能在我的应用程序的菜单屏幕中播放一些背景音乐:

func startMusic() {
do {
try musicPlayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("menu_music", ofType: "mp3")!))
} catch let err as NSError {
print (err.debugDescription)
}
musicPlayer.prepareToPlay()
musicPlayer.numberOfLoops = -1
musicPlayer.play()
}

我在 viewDidLoad 中这样调用它:

   override func viewDidLoad() {
super.viewDidLoad()
startMusic()
}

到目前为止一切顺利。

菜单有几个按钮,它们通过所有在界面构建器中创建的转场将用户带到其他屏幕 - 没有程序转场。

第一个问题是音乐在加载其他屏幕时继续播放。在大多数情况下,这实际上是一个很好的、理想的效果,但我想知道除了创建包含 musicPlayer.stop() 的菜单按钮操作之外,是否还有其他方法可以停止它>musicPlayer.pause()。例如,一个 View Controller 可以停止在另一个 View Controller 中启动的 AVAudioPlayer 吗?

我遇到的更严重的问题是,当我导航回菜单屏幕时(同样,通过启动界面生成器创建的 segue 的按钮),音乐的副本开始播放原始音乐(声音太可怕了)而且似乎没有任何方法可以阻止它或检查它是否正在播放。如果单击并返回更多菜单选项,则会开始播放更多音乐副本。

我试过了

if (!musicPlayer.playing) { 
musicPlayer.play()
}

if (musicPlayer == nil) { 
musicPlayer.play()
}

以及每次停止和启动播放器,但我仍然得到相同音乐的多个副本相互播放。就好像有多个无法停止的同名音乐播放器或在后台运行的同一 View Controller 的多个副本。

我意识到我可能在这里遗漏了一些绝对基本的东西,但谷歌搜索未能为我提供答案,我知道 Stack Overflow 的优秀人员不会让我失望。

谢谢。

最佳答案

在主视图 Controller 的 viewWillDisappear 中,您可以停止 AVAudioPlayer

例如:

override func viewWillDisappear(animated: Bool) {
musicPlayer.stop()
}

关于ios - AVAudioPlayer 在 segue 之后继续播放并在返回原始 View Controller 时重新启动 - 我该如何停止它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37511952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com