didSelectRowAtIndexPath インスタンスの UITableView アイテムから AVAudioPlayer のインスタンスを制御したいと思います。
行項目の最初のタッチで、AVAudioPlayer の「再生」がトリガーされます。行項目の 2 回目のタッチで、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;
}