Ich benutze Swift 2+ und mache eine Stoppuhr/Timer.Wie kann ich meine Swift-Klasse dazu bringen, das Etikett in meinem Viewcontroller in Echtzeit zu aktualisieren?
Grundsätzlich habe ich eine Klasse, StopWatch2, die ich von meinem ViewController aufrufen kann.
Ich kann den Timer innerhalb der Klasse starten, ausführen, stoppen und zurücksetzen.
Ich kann es auch machen die Aktualisierung der Bezeichnung in meinem ViewController, aber nur für 'jetzt.' Zum Beispiel, wenn ich den Timer starte, wird die Bezeichnung 7:59 sagen. Ich kann in meinem Druckprotokoll sehen, dass der Timer herunter zählt, aber das Etikett wird nicht aktualisiert. Wenn ich auf "Stop" klicke, wird das Label mit der aktuellen Uhrzeit aktualisiert.
Der gesamte Code ist hier - https://github.com/markie1313/Debate-Timer. Wenn ich Codebeispiele posten muss, würde ich mich freuen.
Was ist zu tun?
Marke
UPDATE:
Sorry für die Verspätung. Hier ist der Code Ich verwende für die Viewcontroller
Klasse ViewController2AC: UIViewController { var newTimer = StopWatch2()
@IBOutlet var timerText: UILabel!
@IBOutlet var startStopButton: UIButton!
@IBAction func startStopTimer(sender: AnyObject) {
timerText.text = "8:00"
newTimer.startStop()
timerText.text = newTimer.stopWatchString
}
override func viewDidLoad() {
super.viewDidLoad()
newTimer.minutes = 7
newTimer.seconds = 60
}
}
Hier sind die Funktionen genannt:
func startStop() {
if startStopwatch == true {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateStopwatch"), userInfo: nil, repeats: true)
startStopwatch = false
startStopButtonExt = "Stop"
} else {
timer.invalidate()
startStopwatch = true
startStopButtonExt = "Start"
}
}
func updateStopwatch() -> String {
seconds -= 1
if seconds == 0 && minutes == 0 {
timer.invalidate()
labelText = "0:00"
return self.labelText
}
if seconds == 0 {
labelText = "\(minutes):00"
print(labelText)
minutes -= 1
seconds = 60
}
var secondsString = seconds > 9 ? "\(seconds)" : "0\(seconds)"
var minutesString = minutes > 9 ? "\(minutes)" : "\(minutes)"
if seconds == 60 {
secondsString = "00"
minutesString = "\(minutes + 1)"
}
stopWatchString = "\(minutesString):\(secondsString)"
labelText = stopWatchString
print("\(stopWatchString) test")
return self.stopWatchString
}
sollten Sie den Code buchen, anstatt ihn zu verknüpfen. Begrenzen Sie dies auf den Code für den Timer und wie es das Etikett aktualisiert – Wain
Stellen Sie sicher, dass die Benutzeroberfläche immer auf dem Hauptthread aktualisiert wird, – vadian
Bitte schreiben Sie den Code des Viewcontrollers Sie tatsächlich verwenden, da ich viele Klassen in einem sehen kann Datei, die verwirrend ist. Ich sehe auch nicht, dass du StopWatch2 überall instanzist !? –