CoreMotionフレームワーク
内蔵センサの値を使うにはCoreMotionフレームワークを利用する。
//CoreMotionマネージャを作成
let cmManager = CMMotionManager()
センサー値を定期的に読み取る更新間隔を設定する。
cmManager.magnetometerUpdateInterval = 0.1
更新用に定期的に実行するメソッドをクロージャとして定義する。startMagnetometerUpdatesToQueue()でキューとして登録。
//キューで実行するクロージャ
let handler:CMMagnetometerHandler = {(magnetoData:CMMagnetometerData?,error:NSError?) -> Void in
self.showMagnetoData(magnetoData,error: error)
}
//キューを登録し、スタート
cmManager.startMagnetometerUpdatesToQueue(NSOperationQueue.mainQueue(), withHandler: handler)
データを読み取る
func showMagnetoData(magnetoData:CMMagnetometerData?, error:NSError?){
if let data = magnetoData {
var x = data.magneticField.x
var y = data.magneticField.y;
var z = data.magneticField.z;
...
全体のコード
ViewController.swift
import UIKit
import CoreMotion
class ViewController: UIViewController {
@IBOutlet weak var xLabel: UILabel!
@IBOutlet weak var yLabel: UILabel!
@IBOutlet weak var zLabel: UILabel!
let cmManager = CMMotionManager()
override func viewDidLoad() {
super.viewDidLoad()
cmManager.magnetometerUpdateInterval = 0.1
let handler:CMMagnetometerHandler = {(magnetoData:CMMagnetometerData?,error:NSError?) -> Void in
self.showMagnetoData(magnetoData,error: error)
}
cmManager.startMagnetometerUpdatesToQueue(NSOperationQueue.mainQueue(), withHandler: handler)
}
func showMagnetoData(magnetoData:CMMagnetometerData?, error:NSError?){
if let data = magnetoData {
var x = data.magneticField.x
var y = data.magneticField.y;
var z = data.magneticField.z;
x = round(x*100)/100
y = round(y*100)/100
z = round(z*100)/100
xLabel.text = String(x)
yLabel.text = String(y)
zLabel.text = String(z)
}
}
}
実行結果