当我更改 viewController 时,viewWillDisappear 错误/停止播放声音

Posted

技术标签:

【中文标题】当我更改 viewController 时,viewWillDisappear 错误/停止播放声音【英文标题】:viewWillDisappear error/stop playing sound when i change viewController 【发布时间】:2017-12-24 15:33:23 【问题描述】:

我有一些 ViewCotroller,我在其中点击了一个按钮 - 一些音频文件正在播放。我想在更改/关闭此 ViewController 时停止播放音频。我该怎么做?

我尝试向 viewWillDisappear 添加一些方法,如果我不点击任何按钮,它就会崩溃。但是,如果我点击了某个按钮 - 它会正常工作。 ????

import UIKit
import AVFoundation

class BossViewController: UIViewController 

    var audioPlayer = AVAudioPlayer()

    override func viewDidLoad() 
        super.viewDidLoad()
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
    

    //MARK: - Stop sound when we're change/close this viewController

    override func viewWillDisappear(_ animated: Bool) 
        super.viewWillDisappear(animated)

        audioPlayer.stop()
     

这是我的按钮的样子:

@IBAction func boss1(_ sender: AnyObject) 

        let audioFile = NSURL(fileURLWithPath: Bundle.main.path(forResource: "shamp", ofType: "mp3")!)
        do 
            audioPlayer = try AVAudioPlayer(contentsOf: audioFile as URL)
            audioPlayer.prepareToPlay()
         catch 
            print("Problem in getting File")
        

        audioPlayer.play()
    

【问题讨论】:

@a-lebedko:什么是崩溃?编辑您的问题并添加崩溃日志/描述,以帮助我们更好地了解问题 如果我的回答对您有用,您可以通过单击复选标记接受我的回答,以便其他有相同问题的人可以转到我的回答。 【参考方案1】:

您可以检查音频播放器是否正在播放,正如@SandeepBhandari 提到的,或者您可以使用Bool 变量来跟踪用户是否点击了按钮:

var buttonTapped = false

@IBAction func boss1(_ sender: AnyObject) 
    ...
    buttonTapped = true

然后,您可以在viewWillDisappear(_ animated: Bool) 方法中检查变量:

override func viewWillDisappear(_ animated: Bool) 
    if buttonTapped 
        audioPlayer.stop()
    

【讨论】:

以上是关于当我更改 viewController 时,viewWillDisappear 错误/停止播放声音的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 使用 selectedIndex 更改 var

无法将 tabBarController.viewController 转换为 UINavigationController

Swift UIcollectionView 在同一个 ViewController 上更改第二个 UICollectionView 的内容?

目标c - 更改为viewcontroller的另一个navigationcontroller

仅在一个 ViewController 中更改导航栏属性

当我尝试重新加载日期时,Swift 5 TableView 在 ViewController 中发现 nil