2010-04-13 5 views
0

IB를 사용하지 않고 프로그래밍 방식으로 사운드를 재생하는 버튼을 연결하는 방법을 알아 내려고합니다. 사운드를 재생하는 코드가 있지만 사운드를 재생하기 위해 버튼을 연결하는 방법이 없습니까? 어떤 도움?아이폰의 버튼을 사용하여 프로그래밍 방식으로 사운드를 재생하는 코드

 - (void)playSound 
    { 
     NSString *path = [[NSBundle mainBundle] pathForResource:@"boing_1" ofType:@"wav"]; 
     AVAudioPlayer* myAudio = [[AVAudioPlayer alloc] 
       initWithContentsOfURL:[NSURL fileURLWithPath:path error:NULL]]; 
     myAudio.delegate = self; 
     myAudio.volume = 2.0; 
     myAudio.numberOfLoops = 1; 
     [myAudio play]; 
    } 

답변

0
[button addTarget:self action:@selector(playSound) forControlEvents:UIControlEventTouchUpInside]; 

있는 UIButton이 UIControl에서 목표/액션 메소드를 상속 :

여기 내가 사용 내 코드입니다.

+0

이 내가 전에 이런 일을 본 적이 생각하지만, 위치를 기억하지 못했습니다 내가 무엇을 ... 찾고 있었다입니다

은 (내가 @property으로 myAudio을 선언하지 않고 이런 짓을하지만 엄격하게 필요는 없습니다) .... 이것은 잘 작동해야합니다! – Brandon

0

단추를 연결하려면 playSound 메서드를 단추의 UIControlEventTouchUpInside 이벤트에 대한 처리기로 설정하십시오. 이것은 뷰 컨트롤러에있는 가정, 당신은 viewDidLoad 방법에 넣고 할 수 있습니다 :

[button addTarget:self action:@selector(playSound) forControlEvents:UIControlEventTouchUpInside]; 

당신이 alloc이 그것을 -ing 객체를 -ing 없지만 결코 release이기 때문에 참고로, 메모리를 누출하고 있습니다.

이를 방지하려면 클래스에 새로운 AVAudioPlayer 멤버를 만들어야합니다.

@interface MyViewController : ... 
{ 
    ... 
    AVAudioPlayer* myAudio; 
    ... 
} 

- (void)playSound 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"boing_1" ofType:@"wav"]; 
    [myAudio release]; 
    myAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path error:NULL]]; 
    myAudio.delegate = self; 
    myAudio.volume = 2.0; 
    myAudio.numberOfLoops = 1; 
    [myAudio play]; 
} 

dealloc 방법에 [myAudio release]을 넣어하는 것을 잊지 마십시오.

+1

그는 메서드가 호출 될 때마다 AVAudioPlayer의 새 인스턴스를 할당해서는 안됩니다. 'if (! myAudio) {myAudio = [[AVAudioPlayer alloc] initWithContentsOfURL : [NSURL fileURLWithPath : path error : NULL]]] 같은 것을하십시오. }' – indragie

+0

처음에는 아이디어가 "잘 작동"해야한다고 생각합니다. :) –

관련 문제