代码之家  ›  专栏  ›  技术社区  ›  Brewski

停止在第三个viewcontroller上播放音乐-swift 4

  •  1
  • Brewski  · 技术社区  · 6 年前

    我的第一个viewcontroller上有一个简单的背景音乐循环,如下所示:

    func setupMusic() {
    
        if audioEnabled == true {
    
            let soundFile = Bundle.main.path(forResource: "bgMusic", ofType: ".wav")
    
            do {
                try bgmusic = AVAudioPlayer (contentsOf: URL(fileURLWithPath: soundFile!))
            }  catch {
                print (error)
            }
    
            bgmusic.numberOfLoops = -1
            bgmusic.volume = 0.3
            bgmusic.play()
    
        }
    }
    

    我想知道我是如何阻止背景音乐在另一个场景中循环播放的,在我的例子中,就是用户选择静音按钮时的“用户设置”屏幕。

    bgmusic.stop() \\ Wont work because the object 'bgmusic' is not instantiated in the new scene?
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Shehata Gamal    6 年前

    选项1

    class Service {
    
       static let shared = Service()
        var gmusic :AVAudioPlayer?
    }
    
    try Service.shared.gmusic = AVAudioPlayer (contentsOf: URL(fileURLWithPath: soundFile!))
    

    然后使用

    Service.shared.gmusic?.stop()
    

    选项2

    在CurrentVC

     let settingsVc = //
    
     settingsVc.delegate = self
    
     present(settingsVc
    

    / /

     calss SettingsVC:UIViewController {
    
        var delegate:CurrentVC?
    
        func stop () {
    
         delegate?.gmusic.stop()
    
     }