返回第一个 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中点击按钮时关闭