回答編集履歴

1

コード追加

2018/05/21 18:53

投稿

退会済みユーザー
test CHANGED
@@ -87,3 +87,171 @@
87
87
 
88
88
 
89
89
  ```
90
+
91
+
92
+
93
+ あまりにもアレだと思うので、2秒ごとに配列に加速度データ数値を追加して、ボタンを押したらCSVに変換してoutputするやつを置いときます。参考になる部分でもありましたら、ご自身のコードの中に取り入れてみでください。
94
+
95
+
96
+
97
+ ```swift
98
+
99
+ import UIKit
100
+
101
+ import CoreMotion
102
+
103
+
104
+
105
+ class ViewController: UIViewController {
106
+
107
+
108
+
109
+ // ラベルのoutlet接続
110
+
111
+ @IBOutlet weak var xAccelValuLabel: UILabel!
112
+
113
+ @IBOutlet weak var yAccelValuLabel: UILabel!
114
+
115
+ @IBOutlet weak var zAccelValuLabel: UILabel!
116
+
117
+
118
+
119
+ // 加速度データを記憶する配列
120
+
121
+ var accelValueArray = [String]()
122
+
123
+
124
+
125
+ // creMotionManagerを生成する
126
+
127
+ let cmManager = CMMotionManager()
128
+
129
+
130
+
131
+
132
+
133
+ override func viewDidLoad() {
134
+
135
+ super.viewDidLoad()
136
+
137
+ // Do any additional setup after loading the view, typically from a nib.
138
+
139
+
140
+
141
+ // queueを実行する間隔(2.0秒 ← 変更可能)
142
+
143
+ cmManager.deviceMotionUpdateInterval = 2.0
144
+
145
+ // queueで実行するcloure
146
+
147
+ let handler: CMDeviceMotionHandler = {(motionData: CMDeviceMotion?, error: Error?) -> Void in
148
+
149
+ self.motionAnimation(motionData, error: error as Error?)
150
+
151
+ }
152
+
153
+ // 更新で実行するqueueを登録してモーションセンサーをスタートする
154
+
155
+ cmManager.startDeviceMotionUpdates(to: OperationQueue.main, withHandler: handler)
156
+
157
+ }
158
+
159
+
160
+
161
+ // デバイスモーションセンサーで定期的に実行するメソッド
162
+
163
+ func motionAnimation(_ motionData: CMDeviceMotion?, error: Error?) {
164
+
165
+ if let motion = motionData {
166
+
167
+ // x軸方向加速度
168
+
169
+ let accelX = motion.userAcceleration.x
170
+
171
+ xAccelValuLabel.text = String(accelX)
172
+
173
+ // y軸方向加速度
174
+
175
+ let accelY = motion.userAcceleration.y
176
+
177
+ yAccelValuLabel.text = String(accelY)
178
+
179
+ // z軸方向加速度
180
+
181
+ let accelZ = motion.userAcceleration.z
182
+
183
+ zAccelValuLabel.text = String(accelZ)
184
+
185
+
186
+
187
+ let geteData = "(accelX),(accelY),(accelZ)"
188
+
189
+ // 2秒毎に数値を配列に追加する
190
+
191
+ accelValueArray.append(geteData)
192
+
193
+ print("accelValueArray:",accelValueArray)
194
+
195
+ }
196
+
197
+ }
198
+
199
+
200
+
201
+ // accelValueArrayをCSVに変換して保存する
202
+
203
+ @IBAction func saveCSV(_ sender: UIButton) {
204
+
205
+ let fm = FileManager.default
206
+
207
+ //documents
208
+
209
+ let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
210
+
211
+ let filePath = documentsPath + "/getdata.csv"
212
+
213
+ if !fm.fileExists(atPath: filePath) {
214
+
215
+ fm.createFile(atPath: filePath, contents: nil, attributes: [:]) }
216
+
217
+
218
+
219
+ // 配列をCSVに変換する
220
+
221
+ let getData = accelValueArray.map { "\"" + $0 + "\"" }.joined(separator: ",")
222
+
223
+
224
+
225
+ do{
226
+
227
+ try getData.write(toFile: filePath, atomically: true, encoding: String.Encoding.utf8)
228
+
229
+ print("Success to Wite the File")
230
+
231
+ print("getData:",getData)
232
+
233
+ print("filePath:",filePath)
234
+
235
+ }catch let error as NSError{
236
+
237
+ print("Failure to Write File\n(error)")
238
+
239
+ }
240
+
241
+ }
242
+
243
+
244
+
245
+ override func didReceiveMemoryWarning() {
246
+
247
+ super.didReceiveMemoryWarning()
248
+
249
+ // Dispose of any resources that can be recreated.
250
+
251
+ }
252
+
253
+ }
254
+
255
+
256
+
257
+ ```