这是阅读项目30Days of Swift源码的仿写记录,该项目受到国外一个教程:Swift100天的启发。
Demo 1 StopWatch
第一个小demo是个秒表。功能简单就是点击Play计时。Pause暂停。Reset重置。
载入
设一个计数器counter
初值0.0.然后用String()方法转成字符串传给Label。
Play
一个Timer
对象。
点下Play时:
1 |
|
其中UpdateTimer
方法是更新Label的。也就是每个时间间隔timeInterval: 0.1
都会执行 counter+=1
运行测试。没问题。点击Play后。每0.1s时间标签会累加。
如果想更规范可以这么写String以控制数字显示格式:
1 | timeLabel.text = String(format: "%.1f", counter) |
Pause
只需要一个方法:timer.invalidate()
timer对象停止计时。
而此时我们的秒表有了跑和不跑两种状态。
我们新建一个Bool变量isPlaying。方便进行状态的检测。
isPlaying = True
时,playBtn.isEnabled = false
Play按钮失效pauseBtn.isEnabled = true
Pause按钮有效。
FALSE时同理。
isPlaying作用
这时候已经发现小bug:多次点击Play按钮则会多次激活Timer计时器–》多次执行updateTimer方法–>时间增加变快。
解决方法:
在Play按钮的Action中增加一个判断:
1 | if(isPlaying){ |
Reset
没什么特别的了。Counter置0.传到Label就ok。
思考
- 关于状态isPlaying的控制极为重要。
- 按钮的布局忘了怎么加限制了。不过暂时是小问题找个视频学学就好啦~