2012-03-28 3 views
1

Можно создать дубликат:
iOS SDK : playing music on the background and switching viewsIOS фоновой музыка проблема

Привет ребята им в настоящее время, используя этот код, чтобы играть фоновую музыку в моем приложении, когда его начали .А когда я переключать представления на мой SecondView и вернитесь к моему первому представлению, музыка начинается и перекрывает музыку, которая в настоящее время играет, и она продолжает накладывать музыку, когда я возвращаюсь к своему первому представлению, как я могу начать музыку, когда я вернусь в свой Firstview из моего SecondView ,

FirstViewController.m

- (void)viewDidLoad { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"]; 
    theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath] error:NULL]; 
    theAudio.delegate = self; 
    theAudio.numberOfLoops = -1; 
    [theAudio play]; 
+0

Что такое «theAudio»? –

ответ

0

Вы перераспределение и воссоздание AVAudioPlayer каждый раз, когда вы показываете вид. Вы должны избегать этого, если это возможно. В качестве решения вашей проблемы, в зависимости от вашего кода, звоните [theAudio stop] в viewDidDisappear или viewDidUnload событиях. Это остановит ваш аудиоплеер, когда его представление войдет в фон.

+0

Да, вы можете вызвать [theAudio stop] в viewDidDisappear или viewWillDisappear. Но не в viewDidUnload, поскольку он вызывается только при возникновении предупреждения о памяти, а не в другом ... –

+0

ну, мне нужна фоновая музыка для воспроизведения по всем представлениям и нужна перезагрузка музыки, когда я нажму свою домашнюю кнопку обратно в свой первый просмотр. я попробовал [theAudio stop] под ViewDidDisappear, но он останавливает музыку при переключении между представлениями, и мне не нужна эта опция. –

1

2 варианта,

1-stop player, когда первый вид исчезает.

[theAudio stop] in `viewWillDisappear` 

2 Если вы не хотите снова играть, вернитесь. объявить theAudio в классе appDelegate. и перед распределением проверки, выделено ли оно или нет.

if(!appDelegate.theAudio) 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"]; 
    appDelegate.theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath] error:NULL]; 
    theAudio.delegate = self; 
    theAudio.numberOfLoops = -1; 
    [theAudio play]; 
} 
else 
{ 

[theAudiostop]; 
    [theAudio play]; 
} 
+0

ну, мне нужна фоновая музыка, чтобы играть во все виды и нужно перезагрузить музыку, когда я нажму свою домашнюю кнопку обратно в свой первый просмотр. В настоящее время я добавил [theAudio prepareToPlay]; to - (void) viewWillDisappear: (BOOL) анимированный {..и когда я нажимаю кнопку «домой» на мой FirstView, музыка продолжает воспроизводиться, она отлично работает, но мне бы хотелось, чтобы фоновую музыку перезапустили, когда я нажал на свою домашнюю кнопку обратно в свой FirstView. –

3

Вы можете использовать NSUserDefaults, чтобы сохранить воспроизведения музыки статус, поэтому, когда вид загружен, то музыка будет воспроизводиться только, если он уже не имеет.

if ([[NSUserDefaults standardUserDefaults] stringForKey:@"music"] == nil) { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"]; 
    theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath] error:NULL]; 
    theAudio.delegate = self; 
    theAudio.numberOfLoops = -1; 
    [theAudio play]; 
    [[NSUserDefaults standardUserDefaults] setObject:@"-" forKey:@"music"]; } 

Нужно сбросить этот ключ до нуля при выходе из приложения. В противном случае, если игрок покинет приложение, и в следующий раз, когда приложение будет перезапущено, строка @ «music» не будет равна нулю.

Перейти к файл projectAppDelegate.m:

- (void)applicationDidEnterBackground:(UIApplication *)application { 
     [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"music"]; } 

Если музыка воспроизводится по всему приложению, а затем положить воспроизведение музыки коды, как показано ниже, чтобы быть безопасным. Не забудьте объявить AVAudioPlayer * theAudio в файле projectAppDelegate.h.

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"]; 
    theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath] error:NULL]; 
    theAudio.delegate = self; 
    theAudio.numberOfLoops = -1; 
    [theAudio play]; 
    [[NSUserDefaults standardUserDefaults] setObject:@"-" forKey:@"music"]; } 

Возможно, я пропустил несколько бит здесь. Просто запустите несколько тестов, чтобы сделать так, как вам нравится работать. Я просто попробовал свое приложение, и это сработало для меня.

Смежные вопросы