私はスイフト2+を使用しており、ストップウォッチ/タイマーを行っています。Swiftクラスでビューコントローラのラベルをリアルタイムで更新するにはどうすればよいですか?
基本的に、ViewControllerから呼び出すことができるStopWatch2クラスがあります。
クラス内のタイマーを開始、実行、停止、リセットすることができます。
また、私のViewControllerでラベルを更新することもできますが、 'now'のみです。たとえば、タイマーを開始すると、ラベルは7:59と表示されます。印刷ログに、タイマーがカウントダウンしているのがわかりますが、ラベルを更新していません。 「停止」をクリックすると、ラベルは現在の時刻で更新されます。
すべてのコードは、https://github.com/markie1313/Debate-Timerです。コードサンプルを投稿する必要がある場合、私は喜んでいるでしょう。
どうすればよいですか?
マーク
UPDATE:遅延の
申し訳ありません。ここで私はViewControllerを
クラス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
}
}
は関数であります呼び出される:
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
}
リンクする代わりにコードを投稿する必要があります。これをタイマーのコードに制限し、ラベルを更新する方法 – Wain
メインスレッドでUIが常に更新されていることを確認してください。 – vadian
実際に使用するビューコントローラーのコードを投稿してください。混乱しているファイルです。また、StopWatch2をどこでもインスタンス化することはありません。 –