秒表应用程序计数器走得太快

时间:2015-12-19 02:43:00

标签: ios swift

我只是在学习iOS和编程,我正在制作一个非常基本的iOS秒表应用程序。我让秒表工作但是,当我多次按下启动时,计时器开始变得更快,因此它不再是秒(gif here)。此外,我的格式似乎是关闭秒部分,如果你有任何建议,将不胜感激。这是我的代码:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var minuteLabel: UILabel!

@IBOutlet weak var secondLabel: UILabel!

var timer = NSTimer()

var second = 0

var minute = 0

func updateTime() {
    do{
        if second != 59
        {
            second++

            secondLabel.text = ".\(second)"
        }
        else
        {
            second = 0

            minute++

            secondLabel.text = "." + String(format:"$%.2f", second)
            if minute < 10
            {
            minuteLabel.text = "0\(minute)"
            }
            else
            {
                minuteLabel.text = String(format:"$%.2f", minute)
            }
        }
    }

}



@IBAction func resetButton(sender: AnyObject) {
    timer.invalidate()
    second = 0
    minute = 0
    secondLabel.text = ".00"
    minuteLabel.text = "00"

}

@IBAction func stopButton(sender: AnyObject) {
    timer.invalidate()
}

@IBAction func startButton(sender: AnyObject) {

        timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true)

}

感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

size_t i, j, k; ... memset (c, ' ', sizeof c); for (i = 0; i < 5; i++) for (j = 0; j < 10; j++) c[i][j][19] = 0; 被调用时,您不会使timer无效,因此点击&#34;开始&#34};多次创建重复的计时器,它们调用相同的函数startButton。将updateTime更改为如下所示:

startButton

关于格式化的第二个问题,您需要设置一个条件来检查秒数是否小于10,类似于您对分钟所做的操作。你会在秒前面加一个0。在@IBAction func startButton(sender: AnyObject) { if !timer.valid { timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true) } }

updateTime

有关详细信息,请参阅NSTimer documentation

答案 1 :(得分:0)

您可以使用"%02d"代替%.2f来获得所需的格式。使用%.2f将确保小数点后2位数,这在您的情况下是不正确的(您将secondminute都作为整数)。您也可以使用一个标签(例如timerLabel),如下所示:

var second = 0
var minute = 0

func updateTime() {

    let dFormat = "%02d"

    second++
    if second == 59{
        minute++
        second = 0
    }

    let s = "\String(format: dFormat, minute):\String(format: dFormat, second))"
    timerLabel.text = s

}        

希望这有帮助!