Как заставить аудиоплеер играть снова? - PullRequest
2 голосов
/ 01 марта 2012

У меня есть 2 контроллера просмотра, и я играю музыку с AVAudioPlayer в первом контроллере просмотра.Я перехожу ко второму контроллеру просмотра и останавливаю музыку:

[audioPlayer stop];    
[UIView beginAnimations:@"Curl View" context:nil];
        [UIView setAnimationDuration:0.5];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
        [self.view addSubview:secondController.view];
        [UIView commitAnimations];

Когда я снова возвращаюсь к контроллеру первого просмотра, я хочу снова воспроизвести мою музыку, но код больше не касается viewDidLoad.Вот мой код для возврата:

[UIView beginAnimations:@"Flipping View" context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view.superview cache:YES];
    [self.view removeFromSuperview];
    [UIView commitAnimations];

Пожалуйста, поделитесь со мной некоторыми решениями или тем, что код выполняется после этого .. Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 01 марта 2012

Это происходит только потому, что вы вызываете код воспроизведения музыки из viewDidLoad и viewDidLoad вызовов метода только один раз для ViewController.

Вы должны вызывать свой код (воспроизведение музыки) изviewWillAppear вместо viewDidLoad метода.

Я предлагаю вам прочитать UIViewControler Документация.

Обновленный ответ : Как вы хотитевоспроизвести музыкальный файл во время загрузки и возврата к просмотру.Там могут быть некоторые проблемы, касающиеся производительности.Потому что вы называете музыкальный файл сразу загрузкой времени просмотра.Итак, View ниже Строки объяснения.

  • ViewDidLoad - Этот метод вызывается после того, как контроллер представления загрузил свою иерархию представления в память.Этот метод вызывается независимо от того, была ли иерархия представления загружена из файла пера или создана программно в методе loadView.Вы обычно переопределяете этот метод, чтобы выполнить дополнительную инициализацию для представлений, которые были загружены из файлов пера.

  • ViewWillAppear: когда вызывается , это означает, что iPhone ужеготов показать UIView пользователю, и все, что вы здесь делаете, очень заметно повлияет на производительность (например, задержка анимации, воспроизведение музыки и т. д.).

  • ViewDidAppear : Наконец, это уведомляет контроллер представления о том, что его представление было добавлено в иерархию представления. Так что этот метод достаточно хорош для такой задачи, как, например, воспроизведение музыкального файла. Примечание -> в некоторых случаях вы должны вызывать superуказать в вашей реализации.

1 голос
/ 01 марта 2012

Напишите свой игровой код в viewWillAppear:, он вызывается, когда появляется ваше мнение. viewDidLoad: вызывается только один раз для контроллера вида

Обновление Используйте эти строки, чтобы удалить ваш второй вид

[super viewWillAppear:animated];
UIView beginAnimations:@"Flipping View" context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationEnded)];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view.superview cache:YES];
[self.view removeFromSuperview];
[UIView commitAnimations];

И этот метод будет вызываться при удалении представления

- (void)animationEnded{ 
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/BGMCover2.mp3", [[NSBundle mainBundle] resourcePath]]]; 
    NSError *error; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; audioPlayer.numberOfLoops = -1; 
    [audioPlayer play]; 
}
0 голосов
/ 01 марта 2012

Перед тем, как подавать заявку, ознакомьтесь с жизненным циклом UIViewController.Вы можете перейти по следующей ссылке: UIViewController Life Cycle

...