Он ответил раньше: Stopping sound in Xcode
Но я могу повторить свой ответ.
Подводя итог, предложение ОСТАНОВИТЬ звуковой файл:
AudioServicesDisposeSystemSoundID (soundFileObject);
Объяснение (Важно понимать):
У меня есть вид таблицы с 18 различными звуковыми файлами. Когда пользователь выбирает строку, должен звучать соответствующий файл, и при выборе другой строки он должен ОСТАНОВИТЬ предыдущий звук и воспроизвести другой.
Все эти вещи необходимо:
1) Добавить в свой проект "AudioToolbox.framework" внутри "Build Phases", внутри "Ссылка Двоичные с библиотеками"
2) В файле заголовка (в мой проект он называет "GenericTableView.h") добавить эти предложения:
#include <AudioToolbox/AudioToolbox.h>
CFURLRef soundFileURLRef;
SystemSoundID soundFileObject;
@property (readwrite) CFURLRef soundFileURLRef;
@property (readonly) SystemSoundID soundFileObject;
3) в реализации файла (в моем проекте он называет "GenericTableView.m") добавить эти предложения:
@synthesize soundFileURLRef;
@synthesize soundFileObject;
И внутри вашей реализации "Действие" или в моем случае, в:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
//
// That is the question: a way to STOP sound file
//
// -----------------------------------------------------------------------
// Very important to STOP the sound file
AudioServicesDisposeSystemSoundID (soundFileObject);
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// In my project "rowText" is a field that save the name of the
// corresponding sound (depending on row selected)
// It can be a string, @"Alarm Clock Bell" in example
// Create the URL for the source audio file.
// URLForResource:withExtension: method is new in iOS 4.0.
NSURL *soundURL = [[NSBundle mainBundle] URLForResource:rowText withExtension:@"caf"];
// Store the URL as a CFURLRef instance
self.soundFileURLRef = (CFURLRef) [soundURL retain];
// Create a system sound object representing the sound file.
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject);
AudioServicesPlaySystemSound (soundFileObject);
[soundURL release];
}
4) Наконец, в том же файле реализации (в моем проекте он называет "GenericTableView.m"):
- (void)dealloc {
[super dealloc];
AudioServicesDisposeSystemSoundID (soundFileObject);
//CFRelease (soundFileURLRef);
}
Я должен прокомментировать «CFRelease (soundFileURLRef)», потому что приложение неожиданно заканчивается, когда пользователь покидает представление таблицы.
Весь этот код пропорционален Apple. В этой ссылке вы можете найти образец кода для тестирования непосредственно в вашем симуляторе iPhone.
https://developer.apple.com/library/ios/samplecode/SysSound/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008018-Intro-DontLinkElementID_2
Ваши имена методов непонятны, не зная, что Пользовательский интерфейс выглядит. Почему ваши методы IBAction называются «за пределами» и «Years»? – bneely
Beyond and Years - это названия звуков, которые воспроизводятся, и кнопки. – user1176046