質問編集履歴

1

コードを追記しました

2016/08/01 02:42

投稿

lyzmfeqpxs54
lyzmfeqpxs54

スコア237

test CHANGED
File without changes
test CHANGED
@@ -21,3 +21,199 @@
21
21
 
22
22
 
23
23
  ご教示のほどよろしくお願いいたします。
24
+
25
+
26
+
27
+
28
+
29
+ 下記にコードを記載しました。また、詳細を記載させていただきます。
30
+
31
+ 内容としてはtimeFormat()で制限時間が20.00から0.00までカウントダウンするものにNStimerを使用しており、timerbar()で制限時間バーが20秒かけて減少するようにしております。
32
+
33
+
34
+
35
+ これとは別にアニメーション(問題表示)をおこなっておりその時間が数秒に渡る場合カウントダウンが0になる前にバーが減少しきってしまいます。そのアニメーション(問題表示)が1秒以内であればあまり気にならない程度なのですが、数秒の場合カウントダウンが0になるのとバーの減少に1秒以上の差が出てきてしまいます。
36
+
37
+
38
+
39
+ ```swift
40
+
41
+
42
+
43
+ //制限時間の数字表示
44
+
45
+ private var timerLabel: UILabel!
46
+
47
+ //制限時間バー
48
+
49
+ private var myImageView: UIImageView!
50
+
51
+
52
+
53
+ var timer = NSTimer()
54
+
55
+ var countNum = 0
56
+
57
+
58
+
59
+ // スクリーン画面のサイズを取得
60
+
61
+ let scWid: CGFloat = UIScreen.mainScreen().bounds.width //画面の幅
62
+
63
+ let scHei: CGFloat = UIScreen.mainScreen().bounds.height //画面の高さ
64
+
65
+
66
+
67
+ //制限時間の表示
68
+
69
+ func timerLimit(){
70
+
71
+
72
+
73
+ // UILabelを作成する.
74
+
75
+ timerLabel = UILabel(frame: CGRectMake(scWid*0.79 ,scHei*0.4375 ,scWid*0.11 ,scHei*0.025))
76
+
77
+ timerLabel.font = UIFont.boldSystemFontOfSize(scHei*0.018)
78
+
79
+ timerLabel.textColor = UIColor.whiteColor()
80
+
81
+ self.view.addSubview(timerLabel)
82
+
83
+ }
84
+
85
+
86
+
87
+ func update() {
88
+
89
+ countNum += 1
90
+
91
+ timeFormat(countNum)
92
+
93
+ }
94
+
95
+
96
+
97
+ //制限時間の数字の表示
98
+
99
+ func timeFormat(countNum:Int) {
100
+
101
+
102
+
103
+ let ms = countNum % 100
104
+
105
+ let s = countNum / 100
106
+
107
+ timerLabel.text = String(format: "%02d.%02d", 19-s, 100-ms)
108
+
109
+
110
+
111
+ }
112
+
113
+
114
+
115
+ //制限時間追加メソッド
116
+
117
+ func timermethod(){
118
+
119
+ countNum = 0
120
+
121
+ timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: #selector(KenteiViewController.update), userInfo: nil, repeats: true)
122
+
123
+ // Run loopに登録する
124
+
125
+ NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
126
+
127
+ }
128
+
129
+
130
+
131
+ //制限時間を止めるメソッド
132
+
133
+ func timerStop(){
134
+
135
+ timer.invalidate()
136
+
137
+ }
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+ //制限時間バー(オレンジ色のバー)の表示
146
+
147
+ func timerbar(){
148
+
149
+ let barHeight = scHei*0.02
150
+
151
+ let barWidth = scWid*0.66
152
+
153
+ let barXPosition = scWid*0.08
154
+
155
+ let barYPosition = scHei*0.44
156
+
157
+ let barXPositionEnd = barXPosition + barWidth
158
+
159
+ // UIImageViewを作成する.
160
+
161
+ myImageView = UIImageView()
162
+
163
+ // 表示する画像を設定する.
164
+
165
+ let myImage = UIImage(named: "timebar.png")
166
+
167
+ // 画像をUIImageViewに設定する.
168
+
169
+ myImageView.image = myImage
170
+
171
+ // 画像の表示する座標を指定する.
172
+
173
+ myImageView.frame = CGRectMake(barXPosition ,barYPosition ,barWidth ,barHeight)
174
+
175
+ // UIImageViewをViewに追加する.
176
+
177
+ self.view.addSubview(myImageView)
178
+
179
+
180
+
181
+ UIView.animateWithDuration(20, delay: 0.0, options : UIViewAnimationOptions.CurveLinear, animations: {() -> Void in
182
+
183
+ self.myImageView.frame = CGRectMake(barXPositionEnd, barYPosition, 0, barHeight)
184
+
185
+ },
186
+
187
+ completion: {(finished: Bool) -> Void in
188
+
189
+ // アニメーション終了後の処理
190
+
191
+ print("制限時間バーは\(finished)")
192
+
193
+ })
194
+
195
+
196
+
197
+ }
198
+
199
+
200
+
201
+
202
+
203
+ override func viewDidLoad() {
204
+
205
+ super.viewDidLoad()
206
+
207
+
208
+
209
+ //制限時間ラベルの表示
210
+
211
+ timerLimit()
212
+
213
+ //制限時間をつけるメソッドを呼び出す
214
+
215
+ timermethod()
216
+
217
+ }
218
+
219
+ ```