Я создал три AVAudioPlayer, каждый из которых воспроизводит аудиофайл. Во время воспроизведения звука UIButton устанавливается в соответствии с настройкой audioPlayerDidFinishPlaying.Использование только одного AVAudioPlayer вместо трех
При использовании трех разных AVAudioPlayer, я хотел бы использовать только один AVAudioPlayer для эффективности кода.
Однако, когда я пытаюсь переписать код только с одним AVAudioPlayer, я не могу использовать audioPlayerDidFinishPlaying для установки более одного выбранного UIButtons.
Как я могу решить эту проблему?
Вот код с тремя различными 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)
}
}
Пожалуйста, проверьте мой ответ и дайте мне знать, если у вас есть какие-либо сомнения по поводу реализации – KrishnaCA