0

Ich habe eine UIView, die Audio spielt, einen NSTimer hat und eine kreisförmige Balkenanimation ausführt.Hinzufügen und Entfernen von NSNotificationCenter Observer - UIApplicationDidEnterBackgroundNotification - Der richtige Weg?

Um die Dinge einfach zu halten, wenn der Benutzer Apps wechselt oder einen Anruf tätigt, möchte ich, dass alle Prozesse anhalten und sich selbst zurücksetzen.

Ich schlage vor, zu verwenden:

  1. Rufen Sie den Observer - vielleicht in viewWillAppear:

    override func viewWillAppear(animated: Bool) { 
    
    // set observer for WillEnterForeground 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(WorkoutFullFace1Exercise7TVC.willEnterBackground), name: UIApplicationDidEnterBackgroundNotification, object: nil) 
    
    
    ...} 
    

und

  1. Stopp relevante Aufgaben:

    // Stop all audio, timer and animation if app enters background. 
    func willEnterBackground() { 
    
    myAudioPlayer.stop() 
    myAudioPlayer.currentTime = 0 
    
    swiftTimer.invalidate() 
    swiftCounter = 60 
    timerLabel.text = String(swiftCounter) 
    
    
    pauseBtn.alpha = 1.0 
    
    playBtn.alpha = 1.0 
    
    stopBtn.alpha = 1.0 
    
    currentCount = 0 
    circularProgressView.animateFromAngle(circularProgressView.angle, toAngle: 0, duration: 0.5, completion: nil) 
    } 
    
  2. den Betrachter Entlassen:

    override func viewWillDisappear(animated: Bool) { 
    
        NSNotificationCenter.defaultCenter().removeObserver(self, name: UIApplicationDidEnterBackgroundNotification, object: nil) 
    
    .... } 
    

Wo ist der richtige Ort zu laden und die Beobachter zu entlassen? Ich habe Fäden diesen Zustand gelesen viewDidLoad/deinit, viewWillAppear/Disappear usw. zu verwenden ..

Kann jemand bitte auf etwas Licht, was für mein Szenario wird empfohlen, und auch das, was aktuell ist und wahrscheinlich ‚verwendbar‘ in der Zukunft zu bleiben (Sprache und Praxis scheinen sich in der Programmierwelt schnell zu verändern).

Und verwende ich die korrekte Syntax oben?

Danke!

Antwort

1

Alles scheint mir

Gerade richtig stellen Sie sicher, in jeder Methode Super Implementierung zu nennen. Das kann zu einigen Problemen führen, wenn Sie die Dinge Subklassen später

override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated); 
     // other code 
...} 

// same for viewWillDisappear 
+0

Awesome! Habt ein schönes Wochenende, Sir! –

Verwandte Themen