habe ich drei AVAudioPlayer erstellt, die jeweils eine Audiodatei abspielen. Während das Audio abgespielt wird, wird der UIButton von audioPlayerDidFinishPlaying ausgewählt.Mit nur einem AVAudioPlayer statt drei
Da ich drei verschiedene AVAudioPlayer verwenden möchte, möchte ich nur einen AVAudioPlayer für die Effizienz von Code verwenden.
Wenn ich jedoch versuche, Code mit nur einem AVAudioPlayer neu zu schreiben, kann ich audioPlayerDidFinishPlaying nicht verwenden, um mehr als einen UIButtons auszuwählen.
Wie kann ich dieses Problem lösen?
Hier ist der Code mit drei verschiedenen AVAudioPlayer.
let url1 = Bundle.main.bundleURL.appendingPathComponent("audioFile1.mp3")
let url2 = Bundle.main.bundleURL.appendingPathComponent("audioFile2.mp3")
let url3 = Bundle.main.bundleURL.appendingPathComponent("audioFile3.mp3")
@IBOutlet weak var yourButton1: customButton!
@IBOutlet weak var yourButton2: customButton!
@IBOutlet weak var yourButton3: customButton!
fileprivate var player1:AVAudioPlayer?
fileprivate var player2:AVAudioPlayer?
fileprivate var player3:AVAudioPlayer?
@IBAction func pushButton1(sender: UIButton) {
audioPlayer1(url: url1)
}
@IBAction func pushButton2(sender: UIButton) {
audioPlayer2(url: url2)
}
@IBAction func pushButton3(_ sender: UIButton) {
audioPlayer3(url: url3)
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
if (player === player1) {
yourButton.isSelected = false
} else if (player === player2) {
yourButton2.isSelected = false
} else if (player === player3) {
yourButton3.isSelected = true
}
}
func audioPlayer1(url: URL) {
do {
try player1 = AVAudioPlayer(contentsOf:url)
player1!.play()
yourButton1.isSelected = true
player1!.delegate = self
} catch {
print(error)
}
}
func audioPlayer2(url: URL) {
do {
try player2 = AVAudioPlayer(contentsOf:url)
player2!.play()
yourButton2.isSelected = true
player2!.delegate = self
} catch {
print(error)
}
}
func audioPlayer3(url: URL) {
do {
try player3 = AVAudioPlayer(contentsOf:url)
player3!.play()
yourButton3.isSelected = true
player3!.delegate = self
} catch {
print(error)
}
}
Bitte meine Antwort überprüfen und lassen Sie mich wissen, wenn Sie irgendwelche Zweifel haben hinsichtlich der Umsetzung – KrishnaCA