gpt4 book ai didi

ios - swift 3 : Background music plays again every time the view controller loads

转载 作者:行者123 更新时间:2023-11-28 21:16:12 25 4
gpt4 key购买 nike

一旦加载 View Controller ,我的背景音乐就会播放。这很好,但是每次用户返回到该屏幕时它都会再次播放。并将自己分层成一个不连贯的困惑。我需要音乐播放一次并继续播放,直到用户在设置中将其关闭。

我从我编写的代码中了解到。加载 View 后创建 audioPlayer,然后检查 bool 值 isPlaying 是否设置为 false。如果是,则执行 playMusic 函数。如果它设置为 true 它应该什么也不做。我很困惑为什么它会在上一次迭代的基础上再次播放音乐。

每次加载 View 时都会创建音频播放器吗?如果是这样,我将如何解决这个问题?

应用加载后,用户会看到一个开始屏幕。那里开始播放音乐。

然后他们按开始、购买提示或设置。要返回上一个屏幕,您可以点击后退按钮。应用程序设计的设置方式总是将您带回到开始屏幕。 segues 就是在那里设置的。我将控件拖到下一个 View Controller 并选择 show 选项。

import UIKit
import AVFoundation

class ViewController: UIViewController {

var audioPlayer = AVAudioPlayer()

@IBOutlet weak var musicToggle: UIButton!

var isPlaying = false

@IBAction func musicTogglebtn(_ sender: Any) {

}

override func viewDidLoad() {
super.viewDidLoad()

do {
audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "weiss", ofType: "mp3")!))
audioPlayer.prepareToPlay()
} catch {
print(error)
}

if isPlaying == false {
playMusic()
} else {
return
}
}

func playMusic() {
audioPlayer.play()
isPlaying = true
}


override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

}

最佳答案

您没有提供的关键信息是用户如何进入和离开该屏幕?

如果您在其上显示/推送另一个 View Controller ,并且用户关闭/弹出该 View Controller ,则您的带有音频播放器的 View Controller 将显示出来,它的状态仍然完好无损。

如果您弹出/关闭您的 ViewController然后呈现一个新的,或者继续在前一个 View 之上推送/呈现一个新的副本,然后每个 View Controller 都会有自己的状态和自己的音频播放器,这样你就会在每个 View Controller 上播放越来越多的声音其他。

我猜这是你的问题。

发布有关用户如何导航您的 View Controller 的信息,我们可以帮助您解决问题。

编辑:

根据您的回复,我现在明白您的问题了。

声音播放问题是更大问题的征兆。您已经设置了后退按钮来触发显示转场。这将创建一个额外的、全新的 View Controller 副本,该副本将添加到导航堆栈的顶部。这是错误的,会导致很多很多问题。

您应该设置导航 Controller 以显示导航栏。当您这样做时,它会为您设置一个后退按钮,该后退按钮会将前 View Controller 从堆栈中弹出并露出下面的那个。这是后退按钮的预期行为。

相反,如果您希望后退按钮将您带到开始屏幕,那么您应该从后退按钮中删除 segue 链接,而是将其连接到 IBAction。发送消息 popToRootViewController到导航 Controller 。

这将导致您的下一个问题,即当您单击声音返回按钮时,您将关闭当前 View Controller 并失去对音频播放器的访问权限。

您可能应该将声音播放控件移至中央声音管理器对象。这对于单例来说是一个很好的用途。 (向上看。)向您的声音管理器单例添加方法,让您可以开始和停止声音,并在显示 View Controller 时调用声音播放方法,并在您希望声音停止时停止播放。

关于ios - swift 3 : Background music plays again every time the view controller loads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41284745/

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