2011-08-21 6 views
1

재생 및 정지 이미지를 사용하여 버튼을 만들었습니다. 원하는 것은 내가 재생을 누르고 소리가 끝나고, 정지 이미지가 다시 재생되어야하지만 작동하지 않습니다. 아무도 여기 도와주세요. 건배. AVAudioPlayerDelegate에 가입 ​​iPhone - 버튼을 초기 상태로 다시 설정하십시오.

[audioPlayer setDelegate:self]; 

와 헤더 파일 :

- (IBAction)play { 

    if(clicked == 0){ 
     clicked = 1; 
     NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/TEST.wav", [[NSBundle mainBundle] resourcePath]]]; 

     NSError *error; 
     audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
     audioPlayer.numberOfLoops = 0; 


     [audioPlayer play]; 
     [start setImage:[UIImage imageNamed:@"stop.png"] forState:UIControlStateNormal]; 

    } 
    else{ 
     [audioPlayer release]; 
     clicked = 0; 
     [start setImage:[UIImage imageNamed:@"pla.png"] forState:UIControlStateNormal]; 
    } 

} 

//If user does not do anything by the end of the sound set the button to start 
- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player 
         successfully: (BOOL) flag { 
    if (flag==YES) { 
     [start setImage:[UIImage imageNamed:@"pla.png"] forState:UIControlStateNormal]; 
    } 
} 

이 내 .H 파일

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 

int clicked; 

@interface _0_RabbanasViewController : UIViewController { 

    IBOutlet UIScrollView *scroll; 
    AVAudioPlayer *audioPlayer; 
    IBOutlet UIButton *start; 

    IBOutlet UIImage *iPla; 
    IBOutlet UIImage *iStop; 
    BOOL successfully; 

} 

- (IBAction)play; 
- (IBAction)next; 

@end 
+0

는 "pla.png는"수동으로 작업 할 이미지를 설정 않습니다 (정지를 누를 때) ? – fbrozovic

+0

예, 내가 재생을 클릭하면 오디오가 재생되고 정지 이미지가 나타납니다. 정지를 클릭하면 오디오가 중지되고 재생이 표시됩니다. 나는 단지 그것이 연주되고 끝까지 도달 할 때 무엇을 추가 할 것인지를 모른다. 멈추어야한다. – idipro

답변

1

당신이 자기에 AVAudioPlayer 인스턴스의 대리자를 설정해야합니다입니다 프로토콜 :

<AVAudioPlayerDelegate> 

이제 제대로 작동합니다.

편집 :

@interface _0_RabbanasViewController : UIViewController <AVAudioPlayerDelegate> { 

IBOutlet UIScrollView *scroll; 
AVAudioPlayer *audioPlayer; 
IBOutlet UIButton *start; 
... 

는 지금 작동 희망 다음 AVAudioPlayerDelegate 프로토콜에 가입하는 경우 여기. :)

EDIT2 :

audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
audioPlayer.numberOfLoops = 0; 
[audioPlayer setDelegate:self]; 
[audioPlayer play]; 

EDIT3 : 여기에 자동으로 설정 audioPlayer 위임이 추가 :

- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player 
         successfully: (BOOL) flag { 
    if (flag==YES) { 
     clicked = 0; 
     [start setImage:[UIImage imageNamed:@"pla.png"] forState:UIControlStateNormal]; 
    } 
} 
+0

빠른 답변을 주셔서 감사합니다. 코드를 넣으려는 위치를 이해하지 못합니다. 제발 올린 코드에 코드를 추가해주십시오. 건배. – idipro

+0

add [audioPlayer setDelegate : self]; 직전 [audioPlayer play]; , 당신은 다른 비트를 넣을 위치를 보여줄 수 있도록 해당 .h 파일을 게시 할 수 있습니까? – fbrozovic

+0

+1, idipro는 audioPlayerDidFinishPlaying이 모두 호출되었는지 확인해야합니다. –

관련 문제