2016-04-08 35 views
0

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 
} 
+0

Bağlama yapmak yerine kodu göndermelisiniz. bunu zamanlayıcı için kodla ve – Wain

+0

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

+1

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 !? –

cevap

0

Ana dizideki UI etiketlerini farklı bir konumdan değiştirmek istediğinizde, view.setNeedsDisplay numaralı telefonu aramanız gerekir. yerine number > 9

String(format: "%02d", myInt) 

Bu sayıya baştaki sıfırları uygulanacaktır Ayrıca

timerText.text = labelText 

Sana biçim dizesi kullanmanızı öneririm:

0

Sen updateStopwatch yöntemin sonunda Etiket metnini güncelleştirmek zorunda