回答編集履歴

2

ソースコードの修正

2017/12/23 15:01

投稿

togino77
togino77

スコア143

test CHANGED
@@ -16,36 +16,100 @@
16
16
 
17
17
  ```
18
18
 
19
- TimeInterval totalTime = 0
19
+ weak var timer: Timer!
20
20
 
21
- @IBAction func startTimer(sender : AnyObject) {
21
+ var startTime = Date()
22
22
 
23
- // startTime に現在時刻を設定
23
+ var totalTime = 0.0
24
-
25
- }
26
24
 
27
25
 
28
26
 
29
- @IBAction func stopTimer(sender : AnyObject) {
27
+ @IBAction func startTImer(_ sender: Any) {
30
28
 
31
- // startTime と現在時刻の差を totalTime に加算
29
+ if timer != nil {
32
30
 
33
- }
31
+ timer.invalidate()
34
32
 
33
+ }
35
34
 
35
+ else {
36
36
 
37
- @IBAction func resetTimer(_ sender: Any) {
37
+ startTime = Date();
38
38
 
39
- // totalTime 0 にリセット
39
+ }
40
40
 
41
- }
41
+ timer = Timer.scheduledTimer(
42
42
 
43
+ timeInterval: 0.01,
43
44
 
45
+ target: self,
44
46
 
45
- @objc func timerCounter() {
47
+ selector: #selector(self.timerCounter),
46
48
 
47
- // startTime と現在時刻の差と totalTime を加算したものを画面に表示
49
+ userInfo: nil,
48
50
 
51
+ repeats: true)
52
+
49
- }
53
+ }
54
+
55
+
56
+
57
+ @IBAction func stopTimer(_ sender: Any) {
58
+
59
+ if timer != nil {
60
+
61
+ totalTime += Date().timeIntervalSince(startTime)
62
+
63
+ timer.invalidate()
64
+
65
+ timer = nil
66
+
67
+ }
68
+
69
+ displayTime(totalTime)
70
+
71
+ }
72
+
73
+
74
+
75
+ @IBAction func resetTimer(_ sender: Any) {
76
+
77
+ startTime = Date();
78
+
79
+ totalTime = 0.0
80
+
81
+ displayTime(totalTime)
82
+
83
+ }
84
+
85
+
86
+
87
+ @objc func timerCounter() {
88
+
89
+ let currentTime = totalTime + Date().timeIntervalSince(startTime)
90
+
91
+ displayTime(currentTime)
92
+
93
+ }
94
+
95
+
96
+
97
+ func displayTime(_ time: TimeInterval) {
98
+
99
+ let minute = (Int)(fmod((time/60), 60))
100
+
101
+ let second = (Int)(fmod(time, 60))
102
+
103
+ let msec = (Int)((time - floor(time))*100)
104
+
105
+
106
+
107
+ timerMinute.text = String(format:"%02d", minute)
108
+
109
+ timerSecond.text = String(format:"%02d", second)
110
+
111
+ timerMSec.text = String(format:"%02d", msec)
112
+
113
+ }
50
114
 
51
115
  ```

1

入力途中で送信したため

2017/12/23 15:01

投稿

togino77
togino77

スコア143

test CHANGED
@@ -6,11 +6,13 @@
6
6
 
7
7
  - startTimer で startTime を現在時刻にする → それまでの計測はなくなる
8
8
 
9
- - startTimer で startTime をセットしない → stopTimer は意味をなさない.そもそも計測スタートできない
9
+ - startTimer で startTime をセットしない → そもそも計測スタートできない
10
10
 
11
11
 
12
12
 
13
13
  なので,それまでの計測時間の累計を覚えておく変数を用意し,累計に startTime と現在時刻の差を合わせたものを表示する必要があります.
14
+
15
+
14
16
 
15
17
  ```
16
18
 
@@ -34,7 +36,15 @@
34
36
 
35
37
  @IBAction func resetTimer(_ sender: Any) {
36
38
 
37
- // to
39
+ // totalTime を 0 にリセット
40
+
41
+ }
42
+
43
+
44
+
45
+ @objc func timerCounter() {
46
+
47
+ // startTime と現在時刻の差と totalTime を加算したものを画面に表示
38
48
 
39
49
  }
40
50