[iOSアプリ開発][Xcode 8] ストップウォッチを実装する

Swift でストップウォッチを作り、リセットボタンでリセットできるようにする。今回は表示される時間は秒とし、小数第2位まで表示する。

(1)プロジェクトを作成する。

(2)Main.storyboard をクリック。時間表示用のラベルとして、Object library の Label を画面にドラッグアンドドロップする。ボタンは「00.00」などと表示するようにしておくといい。

(3)スタート・ストップ用のボタンとして、Object library の Button を画面にドラッグアンドドロップする。

(4)リセットボタンとして、Object library の Button を画面にドラッグアンドドロップする。ボタンは「リセット」などと名前を変えておくといいだろう。

(5)右上の円が二つ重なった Show the Assistant editor アイコンをクリックし、エディタを表示する。

(6)2のラベルをエディタ(ViewController.swift)に右クリックでドラッグアンドドロップ。以下のように設定する。

Connection;Outlet
Name ;StopWatchLabel
Type ;UILabel
Storage ;Weak

(7)3のボタンをエディタ(ViewController.swift)に右クリックでドラッグアンドドロップ。以下のように設定する。

Connection;Action
Name ;StartStopButton
Type ;AnyObject
Event:Touch Up Inside
Arguments:Sender

(8)以下のようにコードを書く。

 1    @IBOutlet weak var StopWatchLabel: UILabel!
 2    
 3    
 4    var timer = Timer()
 5    var seconds:Int = 0
 6    var fractions:Int = 0
 7    var stopwatchString: String = ""
 8    var startStopWatch:Bool = true
 9    
10    
11    @IBAction func StartStopButton(_ sender: AnyObject) {
12        if startStopWatch == true {
13            timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ThirdViewController.updateStopwatch), userInfo: nil, repeats: true)
14            startStopWatch = false
15        }else {
16            timer.invalidate()
17            startStopWatch = true
18        }
19    }
20    
21    func updateStopwatch() {
22        fractions += 1
23        if fractions == 100 {
24            seconds += 1
25            fractions = 0
26        }
27        let fractionsString = fractions > 9 ? "\(fractions)" : "0\(fractions)"
28        let secondsString = seconds > 9 ? "\(seconds)" : "0\(seconds)"
29        
30        stopwatchString = "\(secondsString).\(fractionsString)"
31        StopWatchLabel.text = stopwatchString
32    }

(9)4のリセットボタンをエディタ(ViewController.swift)に右クリックでドラッグアンドドロップ。以下のように設定する。

Connection;Action
Name ;Reset
Type ;AnyObject
Event:Touch Up Inside
Arguments:Sender

(10)以下のようにコードを書く。

1@IBAction func Reset(_ sender: AnyObject) {
2        fractions = 0
3        StopWatchLabel.text = "00.00"
4    }

参考:
SwiftでなんちゃってStopWatchを作ってみた(その1) | bick.xyz
http://bick.xyz/archives/230

SwiftでなんちゃってStopWatchを作ってみた(その2):ミリ秒を表示しよう | bick.xyz
http://bick.xyz/archives/233

iOS 8 Swift – Make a stopwatch with full functionality – Part 1 / 3 – YouTube
https://www.youtube.com/watch?v=82SXeAmZwk8