teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コード追加

2018/05/21 18:53

投稿

退会済みユーザー
answer CHANGED
@@ -42,4 +42,88 @@
42
42
  }
43
43
  }
44
44
 
45
+ ```
46
+
47
+ あまりにもアレだと思うので、2秒ごとに配列に加速度データ数値を追加して、ボタンを押したらCSVに変換してoutputするやつを置いときます。参考になる部分でもありましたら、ご自身のコードの中に取り入れてみでください。
48
+
49
+ ```swift
50
+ import UIKit
51
+ import CoreMotion
52
+
53
+ class ViewController: UIViewController {
54
+
55
+ // ラベルのoutlet接続
56
+ @IBOutlet weak var xAccelValuLabel: UILabel!
57
+ @IBOutlet weak var yAccelValuLabel: UILabel!
58
+ @IBOutlet weak var zAccelValuLabel: UILabel!
59
+
60
+ // 加速度データを記憶する配列
61
+ var accelValueArray = [String]()
62
+
63
+ // creMotionManagerを生成する
64
+ let cmManager = CMMotionManager()
65
+
66
+
67
+ override func viewDidLoad() {
68
+ super.viewDidLoad()
69
+ // Do any additional setup after loading the view, typically from a nib.
70
+
71
+ // queueを実行する間隔(2.0秒 ← 変更可能)
72
+ cmManager.deviceMotionUpdateInterval = 2.0
73
+ // queueで実行するcloure
74
+ let handler: CMDeviceMotionHandler = {(motionData: CMDeviceMotion?, error: Error?) -> Void in
75
+ self.motionAnimation(motionData, error: error as Error?)
76
+ }
77
+ // 更新で実行するqueueを登録してモーションセンサーをスタートする
78
+ cmManager.startDeviceMotionUpdates(to: OperationQueue.main, withHandler: handler)
79
+ }
80
+
81
+ // デバイスモーションセンサーで定期的に実行するメソッド
82
+ func motionAnimation(_ motionData: CMDeviceMotion?, error: Error?) {
83
+ if let motion = motionData {
84
+ // x軸方向加速度
85
+ let accelX = motion.userAcceleration.x
86
+ xAccelValuLabel.text = String(accelX)
87
+ // y軸方向加速度
88
+ let accelY = motion.userAcceleration.y
89
+ yAccelValuLabel.text = String(accelY)
90
+ // z軸方向加速度
91
+ let accelZ = motion.userAcceleration.z
92
+ zAccelValuLabel.text = String(accelZ)
93
+
94
+ let geteData = "(accelX),(accelY),(accelZ)"
95
+ // 2秒毎に数値を配列に追加する
96
+ accelValueArray.append(geteData)
97
+ print("accelValueArray:",accelValueArray)
98
+ }
99
+ }
100
+
101
+ // accelValueArrayをCSVに変換して保存する
102
+ @IBAction func saveCSV(_ sender: UIButton) {
103
+ let fm = FileManager.default
104
+ //documents
105
+ let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
106
+ let filePath = documentsPath + "/getdata.csv"
107
+ if !fm.fileExists(atPath: filePath) {
108
+ fm.createFile(atPath: filePath, contents: nil, attributes: [:]) }
109
+
110
+ // 配列をCSVに変換する
111
+ let getData = accelValueArray.map { "\"" + $0 + "\"" }.joined(separator: ",")
112
+
113
+ do{
114
+ try getData.write(toFile: filePath, atomically: true, encoding: String.Encoding.utf8)
115
+ print("Success to Wite the File")
116
+ print("getData:",getData)
117
+ print("filePath:",filePath)
118
+ }catch let error as NSError{
119
+ print("Failure to Write File\n(error)")
120
+ }
121
+ }
122
+
123
+ override func didReceiveMemoryWarning() {
124
+ super.didReceiveMemoryWarning()
125
+ // Dispose of any resources that can be recreated.
126
+ }
127
+ }
128
+
45
129
  ```