2015-04-08 11 views
5

Ciao sono nuovo per IOS e Swift.IOS Audio interrompe la riproduzione quando lo schermo si spegne in rapido

Sto creando un'app che contiene due file audio riprodotti sul secondo ViewController. Utilizzo il controller di navigazione e push per passare al secondo ViewController. Come ho scoperto quando si va indietro al primo ViewController, l'audio non si fermerà, ho usato questo codice:

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

Ora l'audio si interrompe quando si va indietro, ma anche l'audio si fermerà se lo schermo si spegne mezzo quando l'applicazione è bloccato o in background, Come posso sbarazzarmi di questo?

Più codice:

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

è possibile caricare più di codice sul vostro lettore audio e che cosa si intende per schermo si spegne? Lo schermo –

+0

si spegne, significa bloccare automaticamente il dispositivo o bloccare il blocco del dispositivo. – Ishu

+0

@Ishu Blocco e blocco automatico. –

risposta

1

Hai provato con il metodo isMovingFromParentViewController?

Il metodo restituisce true quando viene visualizzata la vista, ma false quando il telefono si blocca.

override func viewWillDisappear(animated: Bool) { 

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

Sì, l'ho provato, non ha aiutato :( –

+0

Ho modificato la mia risposta con un altro metodo (isMovingFromParentView invece di isMovingToParentView) e l'ho verificato, e funziona! –

0

Provare a utilizzarlo nel metodo deinit. Spero che questo ti aiuti!!

deinit { 

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

grazie per la risposta ma non l'aiuto :( –

0

effettuare una notifica registro cosa del applicationWillResignActive nella vista e quando l'applicazione è bloccata va a che i metodi ed arrestare l'audioplayer.

1) inserire questo codice in 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

Puoi per favore mostrare qualche codice di esempio? –

+0

aspettare ti do il codice –

+0

@KingsProgrammer per favore leggi la mia risposta a cura Può questo aiuto si –

0

Rimuovere la navigazione predefinita pulsante Indietro aggiungere il pulsante personalizzato con l'azione.

// Nascondi barra di navigazione - Aggiungi il codice nel tuo viewDidLoad (FirstViewController)

self.navigationController .navigationBarHidden = true;

nel secondo controller della vista

@IBAction func popView (mittente: ANYOBJECT) {

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

} 
Problemi correlati