2017-07-29 2 views
0

Sorry, wenn dies eine neue Frage ist, bin ich sehr neu in iOS & Swift. Ich habe einen Timer, ich weiß, ich könnte "CADisplayLink" verwenden, aber wenn ich es verwende, werden meine Millisekunden in meinem Timer wie 1, 3, 7 ... 67, 71 springen ... Ich brauche das nicht, Ich brauche 1, 2, 3, 4, 5 ... 54, 55, 56, 57 ... In iPhone 7, iPhone 7 Plus, iPhone 5 Funktion ziemlich gut, aber in iPhone SE, iPad Retina, iPad Pro, iPad Air der Timer ist zu viel langsam, so im Grunde ist der Timer verzerrt.Timer nicht synchronisiert

Der Timer ist nicht so gut wie die in der Standard-Timer-App (FPS Problem?)

Ich brauche Millisekunden jeden Schritt machen läuft:

func updateStopwatch() { 
    milliseconds += 1 
    print(milliseconds) 
    if milliseconds == 100 { 
     milliseconds = 0 
     seconds += 1 
    } 
    let millisecondsString = milliseconds > 9 ?"\(milliseconds)" : "0\(milliseconds)" 
    let secondsString = seconds > 9 ?"\(seconds)" : "\(seconds)" 
    stopWatchString = "\(secondsString).\(millisecondsString)" 
    labelTimer.text = stopWatchString 
} 

@IBAction func startStopButtonTapped(_ sender: Any) { 
    if isTimerRunning { 
     isTimerRunning = !isTimerRunning 
     timer = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: #selector(updateStopwatch), userInfo: nil, repeats: true) 
    }else{ 
     isTimerRunning = !isTimerRunning 
     timer.invalidate() 
    } 
} 
+1

Zwei Kommentare. 1) Das Display wird nicht so schnell aktualisiert, also machen Sie sich keine Sorgen darüber, dass viele Ziffern angezeigt werden, wenn der Timer läuft. 2) Timer ist nicht so genau. Es ist nicht garantiert, dass das Intervall, nach dem Sie fragen, aufgerufen wird, insbesondere bei einem Wert von nur 0,001. Sie sollten stattdessen eine Uhr lesen, wenn Sie den Timer starten und dann bei jedem * Tick * und berechnen Sie die Differenz zu diesem Zeitpunkt und aktualisieren Sie die Anzeige. – vacawama

+0

Gute Info hier: https://Stackoverflow.com/q/31375361/1630618 – vacawama

Antwort

1

Es gibt keinen Grund Bildschirm zu aktualisieren, jedes Millisekunde. Wenn Sie einen Timer benötigen, um so schnell zu feuern, brauchen Sie hier eine Optimierung. Versuchen Sie zunächst, labelTimer.text zu aktualisieren (und die Zeichenfolge dafür zu berechnen), und zwar alle 40 oder sogar 100 Millisekunden, da gibt es keinen Unterschied in der Benutzererfahrung.

S.S .: Es gibt Tippfehler in der vierten Zeile: Sie brauchen tausend, nicht hundert.

+0

Danke, aber ich brauche in meiner App, dass die Millisekunden jeden Schritt machen. –