2015-04-08 11 views
5

Witam, jestem nowy w IOS i Swift.Dźwięk IOS przestaje być odtwarzany, gdy ekran zgaśnie w trybie szybkim.

Tworzę aplikację, która zawiera dwa pliki audio, które odtwarzane są na drugim ViewController. Używam kontrolera nawigacji i push, aby przejść do drugiego ViewController. Jak znalazłem kiedy wracając do pierwszego ViewController, dźwięk nie zatrzyma, użyłem tego kodu:

override func viewWillDisappear(animated: Bool) { 
    audioPlaying.stop() 
} 

Teraz dźwięk zatrzymuje się po powrocie, ale również dźwięku zatrzyma jeśli ekran gaśnie znaczy, gdy wniosek jest zamknięty lub w tle, Jak mogę się tego pozbyć?

więcej Kod:

var audioPlaying = AVAudioPlayer() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    audioPlaying = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("audioOne", ofType: "mp3")!), error: nil) 
} 

override func viewWillDisappear(animated: Bool) { 
     audioPlaying.stop() 
} 
@IBAction func playPause(sender: AnyObject) { 
    if buttonLabelChange == true { 
     let image = UIImage(named: "btn_pause.png") as UIImage? 
     playPauseButton.setBackgroundImage(image, forState: UIControlState.Normal) 
     buttonLabelChange = false 
     audioPlaying.play() 
    }else{ 
     let image = UIImage(named: "btn_play.png") as UIImage? 
     playPauseButton.setBackgroundImage(image, forState: UIControlState.Normal) 
     buttonLabelChange = true 
     audioPlaying.stop() 
    } 
} 

@IBAction func sliderAction(sender: AnyObject) { 
    audioPlaying.stop() 
    audioPlaying.currentTime = NSTimeInterval(sliderOutlet.value) 
    audioPlaying.prepareToPlay() 
    audioPlaying.play() 
    let image = UIImage(named: "btn_pause.png") as UIImage? 
    playPauseButton.setBackgroundImage(image, forState: UIControlState.Normal) 
    buttonLabelChange = false 
} 
+0

można przesyłać więcej kodu o odtwarzaczu audio i co pan rozumie przez ekran gaśnie? –

+0

ekran gaśnie, oznacza automatyczne zablokowanie urządzenia lub zablokowanie blokady urządzenia. – Ishu

+0

@Ishu Zarówno automatyczne blokowanie i blokowanie. –

Odpowiedz

1

Czy próbowałeś stosując metodę isMovingFromParentViewController?

Metoda zwraca true, gdy widok jest otwierany, ale false, gdy telefon jest zablokowany.

override func viewWillDisappear(animated: Bool) { 

     if self.isMovingFromParentViewController() 
     { 
       audioPlaying.stop() 
     } 
} 
+0

Tak, spróbowałem, nie pomogłem :( –

+0

Edytowałem swoją odpowiedź za pomocą innej metody (isMovingFromParentView zamiast isMovingToParentView) i sprawdziłem ją i działa! –

0

Spróbuj użyć go w metodzie deinit. Mam nadzieję że to pomoże!!

deinit { 

    if (audioPlayer.playing){ 
    audioPlayer.stop(); 
    } 
} 
+0

dziękuję za odpowiedź, ale nie pomaga :( –

0

zrobić jedną rzecz rejestru powiadomienie o applicationWillResignActive w widoku i gdy aplikacja jest zablokowana to idzie w tym, że metody i zatrzymać odtwarzacze audio.

1) umieścić ten kod w viewDidLoad()

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"in-the-storm" ofType:@"mp3"]]; 
    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
    [[AVAudioSession sharedInstance] setActive: YES error: nil]; 
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
    [audioPlayer play]; 
+0

Czy możesz pokazać kod przykładowy linii? –

+0

czekaj podam kod –

+0

@KingsProgrammer proszę sprawdź moją zredagowaną odpowiedź.może ci to pomóc –

0

Usuń domyślny przycisk nawigacji z powrotem dodać przycisk niestandardowy z akcji.

// Ukryj pasek nawigacyjny - Dodaj ten kod w swoim viewDidLoad (FirstViewController)

self.navigationController .navigationBarHidden = true;

w drugim kontrolerze widoku

@IBAction func popView (nadawca: AnyObject) {

audioPlaying.stop() 
    self.navigationController?.popViewControllerAnimated(true); 

} 
Powiązane problemy