Swift 在不同的ViewController中停止音频播放器
我有一个主菜单声音文件在AVAudioPlayer中播放 我想创建一个选项按钮,将我带到另一个视图控制器。当我点击开关时,可以选择关闭主菜单声音。如何停止音频播放 如何在不同的ViewController中访问音频播放器Swift 在不同的ViewController中停止音频播放器,swift,avaudioplayer,viewcontroller,Swift,Avaudioplayer,Viewcontroller,我有一个主菜单声音文件在AVAudioPlayer中播放 我想创建一个选项按钮,将我带到另一个视图控制器。当我点击开关时,可以选择关闭主菜单声音。如何停止音频播放 如何在不同的ViewController中访问音频播放器 如果你需要更多信息,请告诉我。谢谢 您可以将音频播放器创建为一个类,并实例化该类的共享实例 class PageDataSource { var page: Int? var angels = [Angel]() var angelsToSave = [
如果你需要更多信息,请告诉我。谢谢 您可以将音频播放器创建为一个类,并实例化该类的共享实例
class PageDataSource {
var page: Int?
var angels = [Angel]()
var angelsToSave = [Int]()
var myName: String?
static let sharedInstance = PageDataSource()
private init() {}
}
使用该sharedInstance,您可以在所有视图中调用该对象并在其中编辑该对象。我只将它用作在所有视图之间共享数据的一种方式,但我认为您可以使用它来完成所需的工作。以下是它的工作原理示例:
class HomeViewController: UIViewController {
override func viewDidLoad() {
PageDataSource.sharedInstance.page = 1
}
}
一旦运行,就可以从应用程序中的任何位置访问这些数据。您可以通过调用printPageDataSource.sharedInstance.page来测试它
另一种选择是将音频播放器的所有代码都放在一个公共类的扩展中,就像UIViewController的自定义实现一样。如果这样做,您可以在任何支持AVAudioPlayer框架导入、委托等的UIViewController中调用所需的所有函数
对于我使用的警报,我经常这样做:
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)
}
}
有了这段代码,我可以调用docrudalertitle字符串,Message!!!!,按钮标题,nil,从任何UIViewController创建音频播放器作为一个类,并实例化该类的共享实例
class PageDataSource {
var page: Int?
var angels = [Angel]()
var angelsToSave = [Int]()
var myName: String?
static let sharedInstance = PageDataSource()
private init() {}
}
使用该sharedInstance,您可以在所有视图中调用该对象并在其中编辑该对象。我只将它用作在所有视图之间共享数据的一种方式,但我认为您可以使用它来完成所需的工作。以下是它的工作原理示例:
class HomeViewController: UIViewController {
override func viewDidLoad() {
PageDataSource.sharedInstance.page = 1
}
}
一旦运行,就可以从应用程序中的任何位置访问这些数据。您可以通过调用printPageDataSource.sharedInstance.page来测试它
另一种选择是将音频播放器的所有代码都放在一个公共类的扩展中,就像UIViewController的自定义实现一样。如果这样做,您可以在任何支持AVAudioPlayer框架导入、委托等的UIViewController中调用所需的所有函数
对于我使用的警报,我经常这样做:
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)
}
}
有了这段代码,我可以调用docrudalertitle字符串,Message!!!!,任何UIViewController中的按钮标题,无创建一个单例类,在其中添加播放机并从以下位置控制它:
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()
Singleton.sharedInstance.stop()
无论何时您想停止声音,只需呼叫:
Singleton.sharedInstance.play()
Singleton.sharedInstance.stop()
这可以从所有控制器调用。创建一个单例类,在其中添加播放机并从以下位置进行控制:
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()
Singleton.sharedInstance.stop()
无论何时您想停止声音,只需呼叫:
Singleton.sharedInstance.play()
Singleton.sharedInstance.stop()
这可以从所有控制器调用。谢谢你救了我的命谢谢你救了我的命