質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

383閲覧

[swift]計算した回数のカウントとリセット

SKMT

総合スコア57

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/12/29 09:29

編集2017/12/29 19:48

###前提・実現したいこと
cntを正しく動作させたい

###発生している問題・エラーメッセージ
cntでカウントしてそれに準じて処理を行なっているのですが
なぜか動作がおかしく、cntを表示させると値がおかしくて困っています

###該当のソースコード

import UIKit import CoreMotion import AudioToolbox import AVFoundation class ViewController: UIViewController { let motionManager = CMMotionManager() var dataX:[Double] = [] var dataY:[Double] = [] var dataZ:[Double] = [] var deviY = [Double](repeating: 0.0, count: 15000) var dispY = [Double](repeating: 0.0, count: 15000) var btn = false weak var timer: Timer! var startTime = Date() var totalTime = 0.0 var cnt:Int = 0 var alertY = true @IBOutlet weak var timeL: UILabel! @IBOutlet weak var accelX: UILabel! @IBOutlet weak var accelY: UILabel! @IBOutlet weak var accelZ: UILabel! @IBOutlet weak var kakuninL: UILabel! // 計測開始・停止ボタン @IBAction func startB(_ sender: Any) { let button = sender as! UIButton if (btn == true) { btn = false cnt = 0 deviY = [Double](repeating: 0.0, count: 15000) dispY = [Double](repeating: 0.0, count: 15000) button.setTitle("計測開始", for: .normal) stopTimer() } else { btn = true button.setTitle("計測停止", for: .normal) startTimer() cnt = 0 } } @IBAction func resetB(_ sender: Any) { cnt = 0 deviY = [Double](repeating: 0.0, count: 15000) dispY = [Double](repeating: 0.0, count: 15000) resetTimer() stopTimer() } // データの格納 func outputAccelData(acceleration: CMAcceleration){ if (btn) { dataX.append(acceleration.x) dataY.append(acceleration.y) dataZ.append(acceleration.z) accelX.text = String(format: "x = %.3f", acceleration.x) accelY.text = String(format: "y = %.3f", acceleration.y) accelZ.text = String(format: "z = %.3f", acceleration.z) culculator() } } // データの計算 func culculator() { var tmpy:Double = 0.0 if(dataY.count > 10) { for i in 0 ..< (dataY.count - 11) { for j in i ..< (i + 10) { tmpy = tmpy + dataY[j] } tmpy = tmpy / 10.0 for k in i ..< (i + 10) { dispY[i] = dispY[i] + pow(dataY[k]-tmpy,2.0) } dispY[i] = dispY[i] / 10.0 deviY[i] = sqrt(dispY[i]) if(judgecount(deviY[i])){ cnt = cnt + 1 } } } } // 動作の判定 func judgecount(_ devi:Double) -> Bool { var soundIdRing:SystemSoundID = 1005 kakuninL.text = String(format: "%d", cnt) if((devi > 0.20)&&(cnt > 50)) { cnt = 0 return false } else if((cnt == 100)&&(alertY)) { alertY = false let alert1 = UIAlertController(title: nil, message: nil, preferredStyle: .alert) alert1.title = "警告!" alert1.message = "1の方" alert1.addAction( UIAlertAction( title: "OK", style: .default, handler: {(action) -> Void in self.alertY = true })) self.present( alert1, animated: true, completion:nil) if let soundUrl = CFBundleCopyResourceURL(CFBundleGetMainBundle(), nil, nil, nil){ AudioServicesCreateSystemSoundID(soundUrl, &soundIdRing) AudioServicesPlaySystemSound(soundIdRing) } return true } else if((cnt > 200)&&(alertY)) { alertY = false let alert2 = UIAlertController(title: nil, message: nil, preferredStyle: .alert) alert2.title = "警告!" alert2.message = "2の方" alert2.addAction( UIAlertAction( title: "OK", style: .default, handler: {(action) -> Void in self.cnt = 0 self.alertY = true })) self.present( alert2, animated: true, completion:nil) return false } else { return true } } // アラートの表示 func displayalert(_ message:String) { let alert = UIAlertController(title: nil, message: nil, preferredStyle: .alert) alert.title = "警告!" alert.message = message alert.addAction( UIAlertAction( title: "OK", style: .default, handler: {(action) -> Void in self.startTimer() self.alertY = true })) self.present( alert, animated: true, completion:nil) } // 時間の表示 func displayTime(_ time: TimeInterval) { let minute = (Int)(fmod((time/60), 60)) let second = (Int)(fmod(time, 60)) let msec = (Int)((time - floor(time))*100) timeL.text = String(format: "%02d : %02d : %02d", minute, second, msec) } // 時間の計測 @objc func timerCounter() { let currentTime = totalTime + Date().timeIntervalSince(startTime) displayTime(currentTime) } // タイマーのスタート func startTimer() { if timer != nil { timer.invalidate() } else { startTime = Date(); } timer = Timer.scheduledTimer( timeInterval: 0.01, target: self, selector: #selector(self.timerCounter), userInfo: nil, repeats: true) } // タイマーの一時停止 func stopTimer() { if timer != nil { totalTime = totalTime + Date().timeIntervalSince(startTime) timer.invalidate() timer = nil } displayTime(totalTime) } // タイマーのリセット func resetTimer() { startTime = Date(); totalTime = 0.0 displayTime(totalTime) startTimer() } // 加速度取得停止 func stopAccelerometer(){ if (motionManager.isAccelerometerActive) { motionManager.stopAccelerometerUpdates() } } override func viewDidLoad() { super.viewDidLoad() if motionManager.isAccelerometerAvailable { motionManager.accelerometerUpdateInterval = 0.5 motionManager.startAccelerometerUpdates( to: OperationQueue.current!, withHandler: {(accelData: CMAccelerometerData?, errorOC: Error?) in self.outputAccelData(acceleration: accelData!.acceleration) }) } UIApplication.shared.isIdleTimerDisabled = true } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakasho_dev

2017/12/30 02:52

「なぜか動作がおかしく」を具体的に書きましょう。想定している振る舞いを説明して、その振る舞いのどの処理がうまくいっていないのか、それに対する自分の現在の考えなどを書いていただけると回答が得られやすいのではないでしょうか。どのようなプログラムなのかソースを全部読まなくてはいけないという負担を感じると回答者も回答への意欲が薄れます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問