Выполнение действия в фоновом режиме и не отпускание его

#objective-c #cocoa-touch

#objective-c #cocoa-touch

Вопрос:

У меня есть IBAction, как только пользователь нажимает IBAction, воспроизводится звук. Пользователь может включать и выключать звук нажатием кнопки. Нажатие кнопки один раз включает звук, повторное нажатие выключает звук. Это отлично работает в одном контроллере представления. Однако это моя проблема. У меня есть 2 представления, и как только пользователь воспроизводит звук и хочет перейти к другому представлению, звук все еще воспроизводится один раз в другом представлении, но если они хотят остановить звук, им придется вернуться к представлению, которое содержит звук, но проблема в том, что создается новый аудиосеанс, что означает, что существующий звук нельзя отключить. Кто-нибудь знает, как это сделать

Вот код:

 - (IBAction)twoSound:(id)sender; {
    if (ButtonAlReadyClicked == 1) 
    {
        ButtonAlReadyClicked = 2;

        [sender setBackgroundImage:[UIImage imageNamed:@"z2.png"] forState:UIControlStateNormal];

    }
    else if (ButtonAlReadyClicked == 2) 
    {
        ButtonAlReadyClicked = 1;

        [sender setBackgroundImage:[UIImage imageNamed:@"z1.png"] forState:UIControlStateNormal];

    } 
    if (twoAudio amp;amp; twoAudio.playing) {
        [twoAudio stop];
        [twoAudio release];
        twoAudio = nil;
        return;
    }    
    NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp3"];
    if (twoAudio) [twoAudio release];
    NSError *error = nil;
    twoAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:amp;error];
    if (error)
        NSLog(@"%@",[error localizedDescription]);
    twoAudio.numberOfLoops = -1;
    twoAudio.delegate = self;
    [twoAudio play];    


}

-(IBAction)goMain:(id)sender; {

      [self dismissModalViewControllerAnimated:YES];
}
  

Ответ №1:

Я бы создал отдельный класс, который хранит и отслеживает ваш звук. Добавьте к этому классу синглтон и метод для переключения звука. Таким образом, только один экземпляр класса, управляющий музыкой, доступен для всего приложения.