我只是在学习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)
}
感谢您的帮助!
答案 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位数,这在您的情况下是不正确的(您将second
和minute
都作为整数)。您也可以使用一个标签(例如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
}
希望这有帮助!