返回第一个 ViewController 时如何阻止 AVFoundation 音频重新启动?

Posted

技术标签:

【中文标题】返回第一个 ViewController 时如何阻止 AVFoundation 音频重新启动?【英文标题】:How do I stop AVFoundation audio from restarting when returning to first ViewController? 【发布时间】:2018-01-18 06:49:41 【问题描述】:

使用 AVFoundation,我正在尝试使用用户可以打开或关闭的背景音乐。它设置为在应用程序的第一个屏幕出现时自动播放音乐。当切换到另一个 ViewController 时,例如 Settings,音乐继续播放,这很好。但是,当我单击返回按钮返回主屏幕时,音乐重新开始。我搜索了相关问题;但是,它似乎对我不起作用,或者它们有点不同。我想要它做的是,如果音乐已经在播放,它将继续播放而不是重新启动。

这是我目前得到的:

import UIKit
import AVFoundation

var g_musicEffect: AVAudioPlayer = AVAudioPlayer()

class ViewController: UIViewController

    //MARK: Actions
    @IBAction func playButton(_ sender: UIButton)
    
        performSegue(withIdentifier: "seguePlay", sender: self)
    
    @IBAction func settingsButton(_ sender: UIButton)
    
        performSegue(withIdentifier: "segueSettings", sender: self)
    


    override func viewDidLoad()
    
        super.viewDidLoad()
        let musicFile = Bundle.main.path(forResource: "electronic", ofType: ".mp3")

        do
        
            try g_musicEffect = AVAudioPlayer(contentsOf: URL (fileURLWithPath: musicFile!))
        
        catch
        
            print(error)
        
            g_musicEffect.play()
            g_musicEffect.numberOfLoops = -1

【问题讨论】:

检查是否在按下主屏幕时 viewDidLoad() 被调用。这就是问题所在。 您在返回第一个视图控制器时是否使用了 unwind segue?即当按下后退按钮时,使用正常的 segues 将再次加载视图,这就是您的实际问题。使用展开转场 在设置屏幕中执行 .popViewController(animated: true)。 使用 unwind segues 解决了这个问题。感谢您的帮助! 【参考方案1】:

你在回到你的第一个视图控制器时是否使用了 unwind segue ?即当按下后退按钮时,使用正常的 segues 将再次加载视图,这就是您的实际问题。使用 unwind segue。

【讨论】:

以上是关于返回第一个 ViewController 时如何阻止 AVFoundation 音频重新启动?的主要内容,如果未能解决你的问题,请参考以下文章

迅速。 ViewController 之间的转换而不在返回时关闭它们

Monotouch 回到第一个 ViewController

如何将第二个viewcontroller文本字段值传递给第一个viewcontroller数组并在swift4中点击按钮时关闭

更改呈现的第一个 viewController(主界面)

从该音频ViewController IOS7返回后如何停止音频

UITableViewController 在关闭第二个 ViewController 后返回到第一个单元格