我在AVAudioPlayer中播放主菜单声音文件。
我想创建一个选项按钮,将我带到另一个视图控制器。当我点击开关有一个选项来打开主菜单声音"关闭"。如何停止播放音频?
如何在不同的ViewController中访问音频播放器?
如果您需要更多信息,请与我们联系。谢谢!
答案 0 :(得分:2)
创建一个Singleton类,您可以在其中添加播放器并控制它:
SELECT * FROM Arraycheck WHERE 'vin' = ANY (empnames);
每当你想要开始声音时,只需致电:
import AVFoundation
class Singleton {
static let sharedInstance = Singleton()
private var player: AVAudioPlayer?
func play() {
guard let url = Bundle.main.url(forResource: "Sound", withExtension: "mp3") else { return }
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)
guard let player = player else { return }
player.play()
} catch let error {
print(error.localizedDescription)
}
}
func stop() {
player?.stop()
}
}
每当你想要停止声音时,只需致电:
Singleton.sharedInstance.play()
可以从所有控制器调用它。
答案 1 :(得分:0)
您可以将音频播放器创建为类,并实例化该类的共享实例。
class PageDataSource {
var page: Int?
var angels = [Angel]()
var angelsToSave = [Int]()
var myName: String?
static let sharedInstance = PageDataSource()
private init() {}
}
使用sharedInstance
,你可以在所有视图中调用这个ONE对象并在那里编辑它。我只是用它作为在所有视图之间共享数据的方法,但我认为你可以用它来做你想要的。以下是其工作原理的示例:
class HomeViewController: UIViewController {
override func viewDidLoad() {
PageDataSource.sharedInstance.page = 1
}
}
只要运行,就可以从应用中的任何位置访问该数据。您可以致电print(PageDataSource.sharedInstance.page!)
另一种选择是将您的音频播放器的所有代码放在extension
公共类中,就像UIViewController
的自定义实现一样。如果你这样做,你可以调用支持AVAudioPlayer框架的任何UIViewController
所需的所有功能(导入,委托等)。
我经常为我使用的alerts
执行此操作:
extension: UIViewController {
func doCrudAlert(_ title: String, _ message: String, _ button: String, _ completion: (() -> Swift.Void)? = nil) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
let buttonAction = UIAlertAction(title: button, style: .default) { (action) in
completion?()
return
}
alert.addAction(buttonAction)
present(alert, animated: true, completion: nil)
}
}
使用该位代码,我可以从任何doCrudAlert("Title String", "Message!!!!", "Button Title", nil )
UIViewController