【问题标题】:Cannot stop background music (Swift 3, Xcode 8)无法停止背景音乐(Swift 3、Xcode 8)
【发布时间】:2017-06-30 17:47:37
【问题描述】:

我有一个 AVAudioPlayer 在视图加载时运行的实例。来自另一个ViewController 我有一个UISwitch 来停止音乐。我可以从开关接收Bool 并看到它在console 中调用了正确的函数,但我无法让音乐停止播放。我曾尝试停止、暂停和更改音量,但无济于事。当应用程序关闭(双击主页并向上滑动)并且开关状态被关闭时,音乐将不会播放。如果您打开开关,音乐将播放但不会停止。

代码:

var player:AVAudioPlayer = AVAudioPlayer()

let optionDefaults = UserDefaults.standard

override func viewDidLoad() {

    super.viewDidLoad()

    do{

        let audioPath = Bundle.main.path(forResource: "backgroundmusic", ofType: "wav")
        try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPath!) as URL)
        player.volume = 0.2

        if optionDefaults.value(forKey: "musicOn") != nil  {

            let musicOn: Bool = optionDefaults.value(forKey: "musicOn") as! Bool
            if musicOn == false  {

                print("********** Music is off **********")
                player.stop()

            }

            else {

                print("********** Music is On **********")
                player.play()

            }  
        } 
    } catch {
       print("AVPlayer did not initialize")
    }

    player.numberOfLoops = -1
}

********开关代码********

 let optionDefaults = UserDefaults.standard

 @IBOutlet weak var musicOnOff: UISwitch!

 var musicOn : Bool = true

 @IBAction func switchToGame(sender: UIButton) {


    if musicOnOff.isOn{

        musicOn = true
        optionDefaults.set(musicOn, forKey: "musicOn")

    }

    if musicOnOff.isOn == false{

        musicOn = false
        optionDefaults.set(musicOn, forKey: "musicOn")

    }}

override func viewDidLoad() {
    super.viewDidLoad()

if optionDefaults.value(forKey: "musicOn") != nil  {

    let musicOn: Bool = optionDefaults.value(forKey: "musicOn") as! Bool
    if musicOn == false  {

        musicOnOff.isOn = false

    }

    else{

        musicOnOff.isOn  = true

    }
}}

【问题讨论】:

  • 你能包含开关切换的代码吗?似乎视图控制器只在加载一次时检查开关的状态,这不会让你暂停音乐。
  • @DaneJordan,编辑帖子以添加开关切换代码

标签: iphone swift xcode


【解决方案1】:

您仅在视图加载完成时播放音乐。如果您想在切换切换时停止并播放,只需在切换切换操作上调用 palyOrStopMusic 方法

var player:AVAudioPlayer = AVAudioPlayer()

let optionDefaults = UserDefaults.standard

override func viewDidLoad() {

super.viewDidLoad()
     playOrStopMusic()
  }

func playOrStopMusic(){
 do{

        let audioPath = Bundle.main.path(forResource: "backgroundmusic", ofType: "wav")
        try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPath!) as URL)
        player.volume = 0.2

        if optionDefaults.value(forKey: "musicOn") != nil  {

            let musicOn: Bool = optionDefaults.value(forKey: "musicOn") as! Bool
            if musicOn == false  {

                print("********** Music is off **********")
                player.stop()

            }

            else {

                print("********** Music is On **********")
                player.play()

            }  
        } 
    } catch {
       print("AVPlayer did not initialize")
    }

    player.numberOfLoops = -1
}

********开关代码********

 let optionDefaults = UserDefaults.standard

 @IBOutlet weak var musicOnOff: UISwitch!

 var musicOn : Bool = true

 @IBAction func switchToGame(sender: UIButton) {


    if musicOnOff.isOn{
        musicOn = true
        optionDefaults.set(musicOn, forKey: "musicOn")
    }else{
        musicOn = false
        optionDefaults.set(musicOn, forKey: "musicOn")
    }

    playOrStopMusic()
}

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

【讨论】:

  • 那不起作用,现在当我转到选项 ViewController 时,它会再次启动音乐,因此它会覆盖
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多