2015-07-14 1 views
0

В моем mainmenuviewcontroller в viewDidLoad, я говорю ему, чтобы играть на фоне песни. Проблема в том, что когда пользователь переходит к другому виду, а затем возвращается в главное меню, он снова начинает воспроизведение песни, и две копии перекрываются. Я пытался поставить это в viewDidLoad, но он не работаетAVAudioPlayer, играющий сверхурочно viewcont. грузы [Swift]

if themePlayer.playing == false { 

themePlayer.prepareToPlay() 

themePlayer.play() 

} 

Это просто вид игнорирует, если условие и играет в любом случае. Как я могу это исправить?

ответ

0

-viewDidLoad будет работать только при первоначальной загрузке представления. Поскольку ваш плеер все еще играет песню, когда вы перемещаетесь от mainmenuviewcontroller, это означает, что контроллер вида никогда не освобождается. Попробуйте поместить условие if в метод -viewDidAppear или -viewWillAppear.

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated); 

    if themePlayer == nil { 
     // Either it's the first time this view is loaded, or themePlayer was deallocated 
     let soundURL = NSBundle.mainBundle().URLForResource("pres song", withExtension: "mp3") 
     themePlayer = AVAudioPlayer(contentsOfURL: soundURL, error: nil) 
     themePlayer.numberOfLoops = -1 
     themePlayer.volume = 0.1 
     themePlayer.prepareToPlay() 
     themePlayer.play() 
    } 

    if themePlayer.playing == false { 
      themePlayer.prepareToPlay() 
      themePlayer.play() 
     } 
} 

Если у вас возникли сомнения в будущем на если что-то, что называется, с помощью breakpoints и пройти через код.

+0

Я попробовал как viewDidAppear, так и viewWillAppear. Я все еще получаю ту же проблему. Когда я перехожу обратно в главное меню, другая копия звукового клипа начинает воспроизводиться поверх оригинала, и это звучит как две песни, которые воспроизводятся одновременно. – jonathanlv7

+0

Здесь находится код: 'override func viewDidAppear (анимированный: Bool) { super.viewDidAppear (анимированный); // музыка темы пусть soundURL = NSBundle.mainBundle() URLForResource ("прес песня", withExtension: "mp3") themePlayer = AVAudioPlayer (contentsOfURL: soundURL, ошибка: ноль). themePlayer.numberOfLoops = - 1 themePlayer.volume = 0,1 , если themePlayer.playing == ложь { themePlayer.prepareToPlay() themePlayer.play() } }» – jonathanlv7

+0

Вы повторно инициализируете плеер в viewDidAppear, который, я подозреваю, поэтому он снова воспроизведет песню в 'if themePlayer.playing == false'. Перед инициализацией themePlayer в 'viewDidAppear', проверьте, если он уже инициализирован, поскольку нет смысла создавать новый. Я обновлю свой ответ, чтобы код был отформатирован правильно. – timgcarlson

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

  • Нет связанных вопросов^_^