我想從didSelectRowAtIndexPath實例中的UITableView項目控制AVAudioPlayer的實例。didSelectRowAtIndexPath - 訪問tapCount或類似
首先觸摸行項觸發AVAudioPlayer的「播放」。第二次觸摸行項會觸發AVAudioPlayer的「停止」。
我可以讓'遊戲'工作,但不能'停止'工作。此外,後續觸摸行項目會在後臺啓動另一個音頻線程。
確保1次敲擊開始音頻和2次敲擊停止音頻的最佳方式是什麼?
代碼樣本 - 這種方法PREPS音頻文件和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方法部分的情況下,語句中停止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;
}
如果([玩家IsPlaying模塊]){ \t [播放停止]。 \t NSLog(@「玩家測試要玩,所以停下來。」); } else { \t [player play]; (@「玩家測試*不*玩*,所以玩它。」); } 看似合理,但沒有運氣。同樣的行爲,'真正'的測試案例似乎永遠不會運行。重複觸摸選定的行打印「播放器測試*不*播放,所以播放它」一遍又一遍地在日誌中...一邊再次播放音頻。 嗯。 – pteeter 2010-08-30 22:21:21
然後顯示更多代碼。聽起來像錯誤是在別的地方。比如你的AVAudioPlayer代碼。 – 2010-08-31 00:25:51
代碼添加到上面的問題陳述...對不起支持標記標籤不是最直觀的@ StackOverflow。 – pteeter 2010-08-31 01:59:34