Pause-timer, wenn app ist im hintergrund Swift
Meiner ViewController.swift
func startTimer() {
timer = NSTimer().scheduleTimerWithTimerInvterval(1.0,target: self,selctor: Selector("couting"),userinfo: nil, repeats: true)
}
func pauseTimer() {
timer.invalidate()
println("pausing timer")
}
und das ist appDelegate.swift
func applicateWillResignActive(application: UIApplication) {
viewController().pauseTimer()
println("closing app")
}
Er den Druck anhalten timer und schließen der app aber wenn ich Sie wieder öffnen, ich sehe Sie nie unterbrochen. Wie mache ich es richtig?
- Probieren Sie diese Kontrolle , hoffe, das wird Ihnen helfen. cocoacontrols.com/controls/game-timer
- nicht pausiert, wenn app ist im hintergrund
Du musst angemeldet sein, um einen Kommentar abzugeben.
Setzten Sie einen Beobachter hören zu, wenn die Anwendung haben geben Sie hintergrund. Fügen Sie die folgende Zeile in Ihre ViewController die viewDidLoad() Methode.
Fügen Sie die unter-Funktion, um die Benachrichtigung erhalten.
Happy Coding !!!
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(PlayViewController.myObserverMethod(_:)), name:UIApplicationDidEnterBackgroundNotification, object: nil)
jetzt (swift 2.3)NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive), name:UIApplication.didBecomeActiveNotification, object: nil)
imviewDidLoad
, wenn ich betritt die app erneut, wird der timer immer die Aktualisierung in den vorherigen Pausen-Zeit aber auch kein Fortschritt. Meine Zeit audio ist weiter zu spielen. Und ich bekomme diese Fehlermeldung, wenn Sie die EINGABETASTE hintergrundCan't end BackgroundTask: no background task exists with identifier 21 (0x15), or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
. Mit Xcode 11 und iOS-13.Akzeptiert die Antwort von @Suresh in Swift 3
Satz Beobachter hören zu, wenn die Anwendung haben geben Sie hintergrund in Ihrem ViewController die viewDidLoad() Methode.
Fügen Sie die unter-Funktion, um die Benachrichtigung erhalten.
Aktualisierte Antwort für Swift 5:
Erstellen Sie ein neues Objekt und ruft
pauseTimer()
drauf:Anstatt neue Objekt, entweder Sie übergeben sollten, die AppDelegate Instanz und rufen pauseTimer() auf bestehendes Objekt oder Hören
UIApplicationDidEnterBackgroundNotification
Benachrichtigung in Ihrem view-controller-Klasse und pause-timer von dort.Aktualisierte Antwort für Swift 4:
super viewDidLoad()