我想从 didSelectRowAtIndexPath 实例中的 UITableView 项控制 AVAudioPlayer 的实例。
第一次触摸行项目会触发 AVAudioPlayer 的“播放”。行项目的第二次触摸触发 AVAudioPlayer 的“停止”。
我可以让“游戏”发挥作用,但不能让“停止”发挥作用。此外,对行项目的后续触摸会在后台启动另一个音频线程。
确保第 1 次点击开始音频并且第 2 次点击停止音频的最佳方法是什么?
代码示例 - 此方法准备音频文件和 AVAudioPlayer 以供使用:
- (void)makeReadyAudio {
NSString *path = [[NSBundle mainBundle] pathForResource:@"Murderers" ofType:@"mp3"];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error;
musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
[musicPlayer prepareToPlay];
}
此块将在 didSelectRowAtIndexPath 部分的 case 语句中启动和停止 AVAudioPlayer:
case 7: {
//touch to start audio sound playing, touch again to stop playing
[self makeReadyAudio];
if ([musicPlayer isPlaying]) {
[musicPlayer stop];
NSLog(@"musicPlayer tested to be playing, so stop it.");
} else {
[musicPlayer play];
NSLog(@"musicPlayer tested to be *not* playing, so play it.");
}
break;
}