我试图找出如何连接按钮以编程方式播放声音而不使用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 :(得分: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
,但这并非绝对必要)