2017-03-13 5 views
0

스위프트 놀이터에서 노래 재생이 끝나면 함수를 호출하려고합니다. 이것은 내가 사용하고 코드입니다 : 함수가 노래 재생이 완료 될 때 호출되지 않으며, 내가 왜 모르는 그러나스위프트 놀이터에서 곡 완성시 함수 호출 방법

NotificationCenter.default.addObserver(self, selector: Selector(("playerDidFinishPlaying:")), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: winMusic) 

? iOS 앱과는 분명히 다르지 않습니다.

var winMusic = NSURL(fileURLWithPath: Bundle.main.path(forResource: "win", ofType: "mp3")!) 
var winPlayer: AVAudioPlayer? = nil 
class Responder : NSObject { 
    func playerDidFinishPlaying() { 
     print("test") 
     /* Nothing printed here */ 
    } 
    func action(sender: UIButton) { 
     NotificationCenter.default.addObserver(self, selector: #selector(Responder.playerDidFinishPlaying), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: winMusic) 
     NotificationCenter.default.post(name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil) 
     winPlayer!.play() 
    } 
} 
+0

알리미, 알림을 게시하려면 어떻게해야합니까? –

+0

놀이터 코드를 공유 할 수 있습니까? –

+0

Alright @DaveWeston, 코드 게시 됨. –

답변

0

가로 winPlayer 대리자를 설정

winPlayer?.delegate = self 

를 참조하고 대리인이 당신에게 달려 배치 할 방법

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { 
    if flag == true { 
     // song finished successfully here 
    } 
} 

를 구현합니다.

+0

첫 번째 줄은 어디에 넣어야합니까? 나는 "action"함수를 넣으려고하는데 "AVAudioPlayerDelegate '유형에'Responder '유형의 값을 할당 할 수 없다는 오류가 발생하고 Responder 클래스 외부에 배치 할 수 없다면 해결되지 않은 식별자 오류. –

+0

, 아마도'Responder' 클래스의'init' 메소드에서. 신중한'delegate'는'UIVIewController'를 기대합니다. – x4h1d

+0

나는'Responder' 클래스에 사용자 정의 델리게이트를 만들 것을 제안합니다. 부모 컨트롤러가 대리자를 처리하도록합니다. – x4h1d