防止AVAudioPlayers同时播放

时间:2013-11-24 23:00:18

标签: ios objective-c avaudioplayer

我有一个带有几个单元格的UITableView,每个单元格都有一个按钮,触发在子类化单元格中创建的AVAudioPlayer。每个单元格代表一个人,轻按按钮,播放音频文件。

现在,当我点击第一行时,它会像它应该的那样播放。但是当我点击第二排(而第一排仍在播放时),显然它会同时播放它们。如果正在播放,我想停止第一行。

我尝试在我的视图控制器中创建YBCell的属性,如果一行播放声音,它会阻止其他单元格播放并将其自身分配给该属性。这种方式第一次是nil

YBCell.m

- (IBAction)playOrStop:(id)sender
{
    if (thisCellIsPlaying)
    {
        [self.audioPlayer stop];
        thisCellIsPlaying = FALSE;
    }
    else
    {
        YBViewController *vc = [[YBViewController alloc] init];
        [vc stopOtherCellPlaying];

        [self.audioPlayer play];
        [vc setPlayingCell:self];

        thisCellIsPlaying = TRUE;
    }
}

YBViewController.h

@property (strong, nonatomic) YBCell *playingCell;
- (void)stopPlaying;

YBViewController.m

- (void) stopPlaying
{
    [self.playingCell.audioPlayer stop];
}

问题是,当我在self.playingCell中检查-(void) stopPlaying时,它始终会返回nil。此外,使用indexPath.row的每个单元格的标记代替整个单元格,因为它总是返回0,所以不起作用。

如果没有直接答案,我可能会尝试在视图控制器中创建一个音频播放器并让单元格共享它,尽管我认为让每个单元格都有自己的播放器会更好。

1 个答案:

答案 0 :(得分:0)

您似乎正在创建新的对象 YBCell ,并通过对象(AVaudioPlayer)播放来自 YBViewController 的歌曲。声明您的 AVaudioplayer app delegate 并从 YBCell &的 YBViewController