原文链接
作者:Arthur Knopper
原文日期:2016-10-31
译者:Crystal Sun
本节教程讲述如何创建一个简单的计时器,功能有开始、暂停和重置归零,使用 Xcode 8 和 iOS10。
打开 Xcode,创建一个 Single View Application。
点击 Next,product name 一栏填写 IOS10StopwatchTutorial,填写好 Organization Name 和 Organization Identifier,Language 选择 Swift,Devices 选择 iPhone。
到 Storyboard,拖一个 Vertical Stack View 到主界面,拖一个 Label 到 stack view 里,title 改为 “00:00”。接下来,拖三个 button 到 stack view 里,位于 Label 下面,title 分别改为"Start","Pause" 和 “Reset”。Storyboard 看起来如下图:
选中 vertical Stack View,点击 Storyboard 右下角的 Auto Layout 中的 Align 按钮,在弹出窗中输入下图中的值,点击 Add 1 Constraint。
选中 vertical Stack View,点击 Storyboard 右下角的 Auto Layout 中的 Pin 按钮,在弹出窗中输入下图中的值,点击 Add 1 Constraint。
点击 Assistant Editor,确保 ViewController.swift 文件可见。按住 Ctrl,把 Label 拖到 ViewController 类文件里,创建一个 Outlet 如下图:
按住 Ctrl,把 Start 按钮拖到 ViewController 类文件里,创建一个 Outlet 如下图:
按住 Ctrl,把 Pause 按钮拖到 ViewController 类文件里,创建一个 Outlet 如下图:
按住 Ctrl,把 Start 按钮拖到 ViewController 类文件里,创建一个 Action 如下图:
按住 Ctrl,把 Pause 按钮拖到 ViewController 类文件里,创建一个 Action 如下图:
按住 Ctrl,把 Reset 按钮拖到 ViewController 类文件里,创建一个 Action 如下图:
找到 ViewController.swift 文件,增加下列属性:
var counter = 0.0
var timer = Timer()
var isPlaying = false
更改 viewDidLoad 方法:
override func viewDidLoad() {
super.viewDidLoad()
timeLabel.text = String(counter)
pauseButton.isEnabled = false
}
实现 IBAction 方法:
@IBAction func startTimer(_ sender: AnyObject) {
if(isPlaying) {
return
}
startButton.isEnabled = false
pauseButton.isEnabled = true
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(UpdateTimer), userInfo: nil, repeats: true)
isPlaying = true
}
@IBAction func pauseTimer(_ sender: AnyObject) {
startButton.isEnabled = true
pauseButton.isEnabled = false
timer.invalidate()
isPlaying = false
}
@IBAction func resetTimer(_ sender: AnyObject) {
startButton.isEnabled = true
pauseButton.isEnabled = false
timer.invalidate()
isPlaying = false
counter = 0.0
timeLabel.text = String(counter)
}
isPlaying 布尔值用于检查计时器的 timer 是否正在运行。NSTimer 类里的 invalidate 方法可以停止计时。计时器开始计时时调用 updateTimer 方法。
func UpdateTimer() {
counter = counter + 0.1
timeLabel.text = String(format: "%.1f", counter)
}
运行工程代码,在模拟器中点击按钮使用计时器。
在 ioscreator 的 github 上可以下载到本节课程 IOS10StopWatchTutorial 的源代码。
本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权。
网友评论