每个屏幕 3 个图像,每个图像都有不同的声音文件“apple.wav”、“orange.wav”和“ball.wav”,单击时将播放。
我有 AVAudioPlayer 代码,但我正在尝试简化它,所以我没有为每张照片设置单独的函数 playSoundOrange()
, playSoundofApple()
, 等等。
尝试使用相同的功能,但在按钮操作中输入文件名。
按钮代码:
@IBAction func OrangeButton(_ sender: UIButton) {
print("pressed OrangeButton")
playSoundFile(orange.wav) //having it like this would be ideal.
}
我正在尝试修改当前函数,因此我可以为每个按钮使用代码 playSoundFile(orange.wav)
,只需将参数更改为 (apple.wav) 或(球.wav)。
var player : AVAudioPlayer?
func playSoundFile(){
let path = Bundle.main.path(forResource: "*orange*", ofType:"*wav*")!
let url = URL(fileURLWithPath: path)
do {
let sound = try AVAudioPlayer(contentsOf: url)
self.player = sound
sound.numberOfLoops = 0
sound.prepareToPlay()
sound.play()
} catch {
print("error loading file")
// couldn't load file :(
}
}
非常感谢您的帮助。
最佳答案
更新您的 playSoundFile
方法以获取声音名称:
func playSoundFile(_ soundName: String) {
let url = Bundle.main.url(forResource: soundName, withExtension: "wav")!
do {
let sound = try AVAudioPlayer(contentsOf: url)
self.player = sound
sound.numberOfLoops = 0
sound.prepareToPlay()
sound.play()
} catch {
print("error loading file")
// couldn't load file :(
}
}
现在您只需要一个可用于所有三个按钮的按钮操作。
@IBAction func buttonPressed(_ sender: UIButton) {
}
将该一项操作分配给所有三个按钮。
因为每个按钮都有一个导出,将 sender
属性与每个导出进行比较以确定要使用的文件名:
@IBAction func buttonPressed(_ sender: UIButton) {
var soundName: String? = nil
if sender == orangeButton {
soundName = "orange"
} else if sender == appleButton {
soundName = "apple"
} else if sender == ballButton {
soundName = "ball"
}
if let soundName = soundName {
playSoundFile(soundName)
}
}
将 orangeButton
、appleButton
和 ballButton
替换为您商店的实际名称。
关于ios - 单击 AVAudioplayer Swift Xcode 中的按钮时自动更改文件(url、路径),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48133344/