2017-03-21 5 views
-1

in meiner App Ich habe eine UIProgressView, die alle 5 Minuten um +0.1 erhöht werden muss. Die Methode dafür, aber ich weiß, ich habe ein Problem, weil ich möchte die Berechnungen progressview fünf Minuten, auch wenn meine Anwendung dann geschlossen ist, sollte sich auf Echtzeit (iphone Uhr) verlassen und nicht, wenn meine Anwendung geöffnet ist .. . ich werdeUpdate UIProgressView alle 5 Minuten von der aktuellen Zeit

  1. ich öffne meine App und beginnen die Minuten zu zählen
  2. Dann schließe ich die App
  3. ich öffne meine app nach 10 Minuten
  4. meiner Sicht Fortschritt einen Wert von + erklären sollte 0,2 (0,1 alle 5 Minuten)

Ich weiß, dass ich NSDate verwenden sollte, aber es nicht richtig implementieren kann. Könnte mir jemand mit einem Beispiel helfen, besser zu verstehen, wie man das implementiert?

Sie alle

in wenigen Worten danken, was suche ich, ist, dass der Anstieg UIProgressView von den Takt iphone Minuten erhalten werden muss ... das muß geschehen wird, wenn die App geöffnet oder geschlossen ist ... Nur noch eine Minute kommt uiprogressview muss sich ändern. .. kurz gesagt, soll dies eine Energie von einem Benutzer

Antwort

1

Ich denke, Sie sollten:

  1. Shop Startdatum in einigen Variable: NSDate *startDate = [NSDate new];

speichern tatsächlichen Starttermin zu NSUserDefaults:

[[NSUserDefaults standardDefaults] setObject: startDate forKey: @"MyKey"];

  1. Als nächstes, wenn Ihre Anwendung wurde das Datum aus NSUserDefaults aktiv wird, berechnet Zeitintervall zwischen dem gespeicherten Datum und aktuellem Datum:

NSTimeInterval secondsBetween = [[NSDate new] timeIntervalSinceDate: savedDate];

  1. Jetzt können Sie Ergebnis durch den Fortschritt Intervall teilen (ich denke, in ViewWillAppear):

progress = secondsBetween/(5*60) * 0.1

Wenn Sie Ihren Fortschritt nach jeder Zeiteinheit aktualisiert werden soll, wenn der Viewcontroller aktiv ist, sollten Sie NSTimer verwenden:

[NSTimer scheduledTimerWithTimeInterval: (5 * 60) 
    target:self 
    selector:@selector(refreshProgressMethod) 
    userInfo:nil 
    repeats:YES]; 
+0

in wenigen Worten, was ich suche, ist, dass der Anstieg UIProgressView von den Takt iphone Minuten erhalten werden muss. .. das muss passieren wenn die App offen oder geschlossen ist .... nur noch eine Minute kommt uiprogressview muss sich ändern. .. kurz gesagt, sollte dies eine Energie von einem Benutzer wiederherstellen – kAiN

+0

@iOSDev "in ein paar Worten, was ich suche ist, dass die Erhöhung uiprogressview von der Uhr iphone minutes erhalten werden muss" Ja, und so sollten Sie diese Antwort sorgfältig lesen . Es sagt dir sehr genau, wie das geht. – matt

+0

Der einzige Weg, ich vermisste einen Kommentar ... Ich wollte meine Nachricht @matt bearbeiten ... – kAiN

0

Nach App-Start wiederherstellen oder wenn Sie den Fortschritt wollen aktuelle Zeit zu starten, speichern:

let startTime = NSDate()

dann auf Refresh (kann durch Timer Setup alle paar Minuten zu feuern, oder in viewDidAppear()):

let timeDelta = Date().timeIntervalSince(startTime) 
progressBar.progress = timeDelta/(60 * 5) * 0.1 

Update: Klingt wie OP wissen muss, wie die Fortschritte Start anhalten Zeit zwischen dem Beenden der App und dem Neustart. Wie die andere Antwort könnten Sie die UserDefaults verwenden und prüfen, ob bereits eine Startzeit existiert.Wenn es dann erstellen verwenden existiert es sonst einen neuen Eintrag wie folgt:

let userDefaultKey = "startTime" 
var startTime = UserDefaults.standard.object(forKey: userDefaultKey) 
if (startTime == nil) 
{ 
    startTime = Date() 
    UserDefaults.standard.set(startTime, forKey: userDefaultKey) 
} 
Verwandte Themen