Swift 2+ kullanıyorum ve bir kronometre/zamanlayıcı yapıyorum.Swift sınıfımı, gerçek zamanlı olarak denetleyicimdeki etiketi güncellemek için nasıl alabilirim?
Temel olarak, ViewController'ımdan arayabileceğim bir sınıf var, StopWatch2.
Zamanlayıcıyı, sınıfın başlatılmasını, çalıştırılmasını, durdurulmasını ve sıfırlanmasını sağlayabilirim.
Ayrıca ViewController'ımdaki etiketi güncellemeyi yapabilirim, ancak sadece 'şimdi' için. Örneğin, zamanlayıcıyı başlatırsam, etiket 7:59 der. Yazdırma günlüğümde zamanlayıcının geri saydığını, ancak etiketin güncellenmediğini görebiliyorum. 'Durdur'u tıklarsam, etiket geçerli saatle güncellenir.
Tüm kod burada - https://github.com/markie1313/Debate-Timer. Kod örnekleri göndermem gerekirse, memnun olurum.
Ne yapmalı?
işareti
GÜNCELLEME: Gecikme için
üzgünüm. İşte ViewController
sınıf ViewController2AC için kullanıyorum kodu: 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
}
} Burada
fonksiyonlardır çağrılıyor:
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
}
Bağlama yapmak yerine kodu göndermelisiniz. bunu zamanlayıcı için kodla ve – Wain
etiketiyle nasıl güncelleştirdiğinizi sınırlayın UI'nin her zaman ana iş parçacığında güncelleştirildiğinden emin olun, – vadian
Lütfen kullandığınız viewcontroller kodunu yazın, çünkü bir çok dersi sınıfta görebilirsiniz kafa karıştırıcı olan dosya. Ayrıca seni hiç bir yerde StopWatch2'yi anında görmüyorum !? –