#objective-c #cocoa-touch #ios
#objective-c #cocoa-touch #iOS
Вопрос:
Довольно просто, я использую одну кнопку, которая генерирует случайное число, а затем с помощью переключателя / регистра она анимирует изображение и воспроизводит звук. Моя проблема в том, что при повторном нажатии кнопки звук, который воспроизводился до этого, не останавливается и звук перекрывается.
Вот код:
- (IBAction) pushme: (id) sender{
int random = (arc4random()%10);
switch (random) {
case 0: {
[ANIMATION NUMBER 0]
NSString *path = [NSString stringWithFormat:@"%@%@",[[NSBundle mainBundle] resourcePath],@"/sound0.wav"];
SystemSoundID soundID;
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)filePath, amp;soundID);
AudioServicesPlaySystemSound(soundID);
}
break;
case 1: {
[ANIMATION NUMBER 1]
NSString *path = [NSString stringWithFormat:@"%@%@",[[NSBundle mainBundle] resourcePath],@"/sound1.wav"];
SystemSoundID soundID;
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)filePath, amp;soundID);
AudioServicesPlaySystemSound(soundID);
} break; //Lots more cases after this one
Я знаю, что это не лучший способ сделать это, объявляя одну и ту же переменную снова и снова.
но есть ли способ остановить его до того, как он воспроизведет другой?
Комментарии:
1. LOL я только что обнаружил ответ на свой собственный вопрос.
2. Это здорово! Пожалуйста, опубликуйте ответ здесь, чтобы другие могли извлечь пользу из вашего исследования.
3. @Nicolas: извините, я имел в виду добавить это как «Ответ», ниже. Таким образом, вопрос не отображается в результатах поиска как оставшийся без ответа. Спасибо!
4. @JoshCaswell я не могу, потому что как новый пользователь я не могу ответить на это, прежде чем пройдет 8 часов.
5. @JoshCaswell, можешь добавить это, пожалуйста?
Ответ №1:
Я только что нашел ответ на свой собственный вопрос.
Что я сделал, так это
- Объявите
SoundSystemID soundID;
в заголовке. - Добавьте эту строку до того, как будет сгенерировано случайное число:
AudioServicesDisposeSystemSoundID(soundID);
Помните, что если вы собираетесь воспроизводить звук снова, вам нужно будет снова загрузить ресурс после его утилизации.
В любом случае, спасибо вам, ребята.