Воспроизведение нескольких аудиофайлов с помощью нескольких кнопок

Я пытаюсь поиграть с приложением для звуковой платы, и мне нужно более 50 кнопок (по одной для каждого звука, который у меня есть) на моем контроллере представления. Кроме того, я хотел сделать кнопки (и код аудиоплеера) полностью программными, так как постоянно раздражает переключение между раскадровкой и файлами .h / .m. Вместо того, чтобы копировать и вставлять один и тот же код кнопки 50 раз, я использую этот цикл for, чтобы сделать кнопки для себя:

NSUInteger i;
int xCoord=0;
int yCoord=0;
int buttonWidth=100;
int buttonHeight=50;
int buffer = 10;
for (i = 1; i <= 100; i++)
{
    UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
    aButton.frame     = CGRectMake(xCoord, yCoord,buttonWidth,buttonHeight );
    [aButton addTarget:self action:@selector(playAudioMethod) forControlEvents:UIControlEventTouchUpInside];
    [scrollView addSubview:aButton];

    yCoord += buttonHeight + buffer;
}
[scrollView setContentSize:CGSizeMake(700, yCoord)];

PlayAudioMethod в селекторе для события нажатия кнопки воспроизводит только один звук. Как может быть 50 звуков, каждому из которых соответствует отдельная кнопка? Извините, если это действительно простой вопрос, я все еще изучаю цель C. Спасибо!

РЕДАКТИРОВАТЬ:

Вот playAudioMethod:

- (void) playButtonSound:(id)inSender
{
    AudioServicesPlaySystemSound(self.SoundID);
}

По сути, он просто воспроизводит свойство SoundID, в которое я передал звуковой файл через это:

   NSURL *buttonURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"medic_taunts01" ofType:@"wav"]];
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)buttonURL, &SoundID);
    self.SoundID = SoundID;

person Quikdart    schedule 05.03.2014    source источник
comment
Покажите свой метод playAudioMethod   -  person Sunny Shah    schedule 05.03.2014
comment
Готово, я только что добавил метод воспроизведения звука.   -  person Quikdart    schedule 05.03.2014


Ответы (2)


playAudioMethod имеет один аргумент - sender. sender - это кнопка, сгенерировавшая сообщение.

- (void)playAudioMethod:(id)sender
{
    UIButton *button = (UIButton *)sender;
    switch (button.tag)
    {
           //....
    }
}

Вы можете использовать свойство кнопки tag для хранения значения, например, вы можете сохранить целое число, которое позволяет вам идентифицировать кнопку в playAudioMethod, или вы можете напрямую сохранить имя аудиоресурса.

person Merlevede    schedule 05.03.2014
comment
Я попробую, но могу ли я увеличить тег в цикле for? Может быть, используя что-то вроде: [button tag ++]? Спасибо. - person Quikdart; 05.03.2014
comment
Вы бы предпочли сделать что-нибудь вроде button.tag = i - person Merlevede; 06.03.2014

Похоже, вам нужен проигрыватель звукового банка, например http://www.hollance.com/2011/02/soundbankplayer-using-openal-to-play-musical-instruments-in-your-ios-app/

person P i    schedule 23.03.2014