SwiftUIでオーディオの再生終了を検知する方法を説明する。
Swift 5.7 / Xcode 14.0 / iOS 16.0
結論
AVAudioPlayerDelegateに準拠したclassでaudioPlayerDidFinishPlaying()を記述する。
具体例
再生が終了すると「再生が終了したよ」とprintするAppを作成する。
- NSObject, AVAudioPlayerDelegateに準拠したclassを記述する。
- NSObject準拠のclassなので、init()にはoverrideを付けsuper.init()も記述する。
- delegateの設定をする。
- audioPlayerDidFinishPlaying()に再生終了時の処理を記述する。
import SwiftUI
import AVFoundation
struct ContentView: View {
var audioPlayer = プレイヤー()
var body: some View {
Button(action: {
audioPlayer.playSound()
}) {
Text("再生")
}
}
}
class プレイヤー: NSObject, AVAudioPlayerDelegate { // ? 1
var player: AVAudioPlayer?
let soundURL = Bundle.main.url(forResource: "3sec", withExtension: "m4a")
override init() { // ? 2
super.init()
print("初期化したいことがあればここに記述")
}
func playSound() {
do {
player = try AVAudioPlayer(contentsOf: soundURL!)
player?.delegate = self // ? 3
player?.play()
} catch {
print("エラー")
}
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
print("再生が終了したよ") // ? 4
}
}
まとめ
SwiftUIでオーディオの再生終了を検知する方法を説明した。
コメント