はじめに
以前、水準器を作成した際に使用したCoreMotion
を使ってサンプルアプリを作ってみます。
簡単に端末の傾きが取得できるので是非試してみてください!
実装
import SwiftUI
import CoreMotion
struct ContentView: View {
private let motionManager = CMMotionManager()
@State private var x: Double = 0.0
@State private var y: Double = 0.0
@State private var z: Double = 0.0
var body: some View {
VStack(spacing: 50) {
Text("x: \(x)")
Text("y: \(y)")
Text("z: \(z)")
}
.onAppear() {
start()
}
.onDisappear() {
stop()
}
}
func start() {
if motionManager.isAccelerometerAvailable {
motionManager.accelerometerUpdateInterval = 0.5
motionManager.startAccelerometerUpdates(to: .main) { data, error in
guard let data else { return }
x = data.acceleration.x
y = data.acceleration.y
z = data.acceleration.z
}
}
}
func stop() {
if motionManager.isAccelerometerActive {
motionManager.stopAccelerometerUpdates()
}
}
}
注意
サンプルアプリは実機でのみ動きます
解説
CoreMotion
をインポートします。
import CoreMotion
CMMotionManager()
をインスタンス化します
private let motionManager = CMMotionManager()
傾きの格納先を作ります
@State private var x: Double = 0.0
@State private var y: Double = 0.0
@State private var z: Double = 0.0
isAccelerometerAvailable
でモーションセンサーが使用できるか判定します
if motionManager.isAccelerometerAvailable {
}
accelerometerUpdateInterval
で更新の頻度を決めます
motionManager.accelerometerUpdateInterval = 0.5
startAccelerometerUpdates
で傾きの監視を開始します。
motionManager.startAccelerometerUpdates(to: .main) { data, error in
guard let data else { return }
x = data.acceleration.x
y = data.acceleration.y
z = data.acceleration.z
}
Viewが表示された時に監視をスタートさせます。
.onAppear() {
start()
}
Viewが非表示された時に監視をストップさせます。
.onDisappear() {
stop()
}
おわり
めっちゃ簡単でした!!
CoreMotionは他にもいろいろな値が取得できるっぽいので今後使ってみようと思います!