使用iphone上的按钮以编程方式播放声音的代码

时间:2010-04-13 00:27:22

标签: iphone objective-c audio

我试图找出如何连接按钮以编程方式播放声音而不使用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];
    }

2 个答案:

答案 0 :(得分:0)

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

UIButton从UIControl继承其目标/操作方法。

答案 1 :(得分:0)

要挂钩按钮,请将playSound方法设为按钮UIControlEventTouchUpInside事件的处理程序。假设这是在视图控制器中,您可能希望将其放在viewDidLoad方法中:

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

仅供参考,你是在泄漏记忆,因为你是alloc一个对象,但从来没有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];
}

不要忘记将[myAudio release]放入dealloc方法。

(我这样做没有将myAudio声明为@property,但这并非绝对必要)