2015-04-08 4 views
5

Hallo bin ich neu zu IOS und Swift.IOS Audio hört auf, wenn der Bildschirm in swift

Ich mache eine App, die zwei Audiodateien enthält, die auf der zweiten ViewController spielt. Ich benutze den Navigationscontroller und push, um zum zweiten ViewController zu gehen. Als ich fand, als auf den ersten ViewController zurück, wird die Audio-stoppen, habe ich diesen Code:

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

Jetzt stoppt die Audio wenn wieder gehen, aber auch wird der Ton nicht mehr, wenn Siebmittel erlischt, wenn Anwendung ist gesperrt oder im Hintergrund, Wie kann ich das loswerden?

Weitere Code:

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

können Sie mehr Code über Ihren Audio-Player laden und was hast du damit meinen Bildschirm losgeht? –

+0

Bildschirm wird ausgeschaltet, bedeutet, dass das Gerät automatisch gesperrt oder die Gerätesperre gesperrt wird. – Ishu

+0

@Ishu Beide automatisch sperren und sperren. –

Antwort

1

Haben Sie versucht, die Methode isMovingFromParentViewController verwenden?

Die Methode gibt true zurück, wenn die Ansicht geöffnet wird, aber false, wenn das Telefon gesperrt wird.

override func viewWillDisappear(animated: Bool) { 

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

Ja, ich habe das versucht, hat nicht geholfen :( –

+0

bearbeitet ich meine Antwort mit einer anderen Methode (isMovingFromParentView statt isMovingToParentView) und überprüft es, und arbeitet! –

0

Versuchen Sie es in Deinit-Methode zu verwenden. Hoffe das hilft!!

deinit { 

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

dank für Antwort, aber nicht :( –

0

tun eine Sache Register Benachrichtigung des applicationWillResignActive Ihrer Ansicht und bei gesperrter Anwendung es geht, dass Methoden und den Audioplayer stoppen.

1) setzen diesen Code 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

helfen können Sie einige Beispiel-Leitungscode zeigen bitte? –

+0

warte ich Ihnen Code –

+0

@KingsProgrammer bitte Überprüfen Sie meine bearbeitete Antwort. Möge dies Ihnen helfen. –

0

Entfernen Sie die Standard-Navigationstaste fügen Sie Ihre benutzerdefinierte Schaltfläche mit der Aktion zurück.

// ausblenden Navigationsleiste - Fügen Sie diesen Code in Ihre viewDidLoad (FirstViewController)

self.navigationController .navigationBarHidden = true?;

in der zweiten Ansicht Controller

@IBAction func popView (Sender: ANYOBJECT) {

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

}