回答編集履歴

2

追記

2020/07/07 05:21

投稿

TsukubaDepot
TsukubaDepot

スコア5086

test CHANGED
@@ -1,3 +1,11 @@
1
+ オリジナルのコードに基づく修正結果は後半に追記しました。
2
+
3
+
4
+
5
+ ---
6
+
7
+
8
+
1
9
  BPM = Beats per Minute なので、一分間の拍数(タップ回数)を計測すれば良いことになります。
2
10
 
3
11
 
@@ -173,3 +181,113 @@
173
181
  }
174
182
 
175
183
  ```
184
+
185
+ ---
186
+
187
+ # 追記
188
+
189
+
190
+
191
+ 思ったように動かない、というコードをきちんとみてみました。
192
+
193
+
194
+
195
+ タップ間の経過時間を計算した値で 60 を割ることによってリアルタイムで BPM を表示したいのだと理解しました(上で指摘した項目のうち、リアルタイムで計測することを実現しようとしている)。
196
+
197
+
198
+
199
+ 思うように動かない理由は
200
+
201
+ - 初回だけで良い Timer のインスタンスを毎回作っている(作っても多分動くが意味がない)
202
+
203
+ - `BPM` に入れるべき計算結果を `count` に入れて上書きしている
204
+
205
+ - タップごとに `count` をリセットしなければいけないのにリセットしていない
206
+
207
+
208
+
209
+ などがあります。
210
+
211
+
212
+
213
+ これらを修正すれば、概ね元の構造を残したまま動くようにすることは可能です。
214
+
215
+
216
+
217
+ ```Swift
218
+
219
+ import UIKit
220
+
221
+
222
+
223
+ class ViewController: UIViewController {
224
+
225
+
226
+
227
+ var count: Double = 0.00
228
+
229
+
230
+
231
+ var timer: Timer!
232
+
233
+ var BPM: Double!
234
+
235
+
236
+
237
+ @IBOutlet var timerLabel: UILabel!
238
+
239
+
240
+
241
+ override func viewDidLoad() {
242
+
243
+ super.viewDidLoad()
244
+
245
+ // Do any additional setup after loading the view.
246
+
247
+ }
248
+
249
+
250
+
251
+ @IBAction func start() {
252
+
253
+ // MARK: タイマは初回だけ起動
254
+
255
+ if timer == nil {
256
+
257
+ timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ViewController.update), userInfo: nil, repeats: true)
258
+
259
+ } else {
260
+
261
+ // 秒数を count で割った値を BMP に代入
262
+
263
+ BPM = 60 / count
264
+
265
+ timerLabel.text = String(format: "%.2f", BPM)
266
+
267
+ // count はゼロにする
268
+
269
+ count = 0
270
+
271
+ }
272
+
273
+ }
274
+
275
+
276
+
277
+ @IBAction func stop() {
278
+
279
+ timer.invalidate()
280
+
281
+ }
282
+
283
+
284
+
285
+ @objc func update() {
286
+
287
+ count = count + 0.01
288
+
289
+ }
290
+
291
+ }
292
+
293
+ ```

1

minuts -> minut

2020/07/07 05:21

投稿

TsukubaDepot
TsukubaDepot

スコア5086

test CHANGED
@@ -1,4 +1,4 @@
1
- BPM = Beats per Minutes なので、一分間の拍数(タップ回数)を計測すれば良いことになります。
1
+ BPM = Beats per Minute なので、一分間の拍数(タップ回数)を計測すれば良いことになります。
2
2
 
3
3
 
4
4
 
@@ -168,8 +168,6 @@
168
168
 
169
169
  bpmLabel.text = "BPMは (estimatedBPM) です"
170
170
 
171
-
172
-
173
171
  }
174
172
 
175
173
  }