사운드를 재생하는 앱을 개발 중이라면, 사운드 재생이 완료된 후에 특정한 액션을 실행하고 싶을 수 있습니다. 이를 위해 Swift에서는 AVAudioPlayerDelegate
프로토콜을 사용하여 사운드 재생이 완료된 후에 원하는 동작을 수행할 수 있습니다. 이번 글에서는 이에 대해 알아보겠습니다.
1. AVAudioPlayerDelegate 프로토콜 구현
먼저, AVAudioPlayerDelegate
프로토콜을 구현하여 사운드 재생이 완료된 후에 호출될 메서드를 작성해야 합니다. 아래와 같은 메서드를 작성하여야 합니다.
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
// 재생 완료 후 실행할 액션을 작성합니다.
}
이 메서드는 사운드 재생이 완료된 후에 자동으로 호출되며, player
매개변수에는 재생이 완료된 사운드를 재생하는 AVAudioPlayer
인스턴스가 전달됩니다. flag
매개변수는 사운드 재생이 성공적으로 완료되었는지를 나타내는 불리언 값입니다.
2. AVAudioPlayer 인스턴스 생성 및 delegate 설정
사운드를 재생하기 위해 AVAudioPlayer
클래스의 인스턴스를 생성해야 합니다. 그리고 해당 인스턴스의 delegate
속성을 설정하여 방금 작성한 프로토콜을 구현한 곳을 가리킵니다. 예시 코드는 아래와 같습니다.
import AVFoundation
class SoundPlayer: NSObject, AVAudioPlayerDelegate {
var audioPlayer: AVAudioPlayer?
func playSound() {
guard let soundURL = Bundle.main.url(forResource: "sound", withExtension: "mp3") else {
return
}
do {
audioPlayer = try AVAudioPlayer(contentsOf: soundURL)
audioPlayer?.delegate = self
audioPlayer?.play()
} catch {
print("사운드 재생 오류: \(error)")
}
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
// 사운드 재생이 완료된 후에 실행할 액션을 작성합니다.
print("사운드 재생 완료")
}
}
위의 예시 코드에서는 SoundPlayer
클래스가 AVAudioPlayerDelegate
프로토콜을 구현하고 있습니다. playSound()
메서드에서는 사운드를 재생하고, audioPlayerDidFinishPlaying(_:_:)
메서드에서는 재생이 완료된 후에 실행할 액션을 작성할 수 있습니다.
3. 액션 실행하기
audioPlayerDidFinishPlaying(_:_:)
메서드 내에서 원하는 액션을 작성하여 실행할 수 있습니다. 예를 들어, 다음과 같이 액션을 설정할 수 있습니다.
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
// 사운드 재생이 완료된 후에 실행할 액션을 작성합니다.
print("사운드 재생 완료")
// 다른 메서드 호출
doSomething()
// 다른 객체의 메서드 호출
otherObject.doSomethingElse()
}
위의 예시에서는 audioPlayerDidFinishPlaying(_:_:)
메서드 내에서 print
함수를 통해 사운드 재생이 완료되었음을 출력한 후, 다른 메서드나 다른 객체의 메서드를 호출할 수 있습니다.
사운드 재생이 완료된 후에 실행할 액션은 해당 앱의 요구사항에 따라 다양하게 구현할 수 있습니다.
이렇게 Swift에서는 AVAudioPlayerDelegate
프로토콜을 사용하여 사운드 재생이 완료된 후에 실행할 액션을 설정할 수 있습니다. 이를 통해 앱의 사용자 경험을 개선하고, 원하는 기능을 구현할 수 있습니다.
참고 자료: