LoginSignup
4
1

More than 1 year has passed since last update.

【Swift】端末の傾きを取得する

Last updated at Posted at 2022-10-21

はじめに

以前、水準器を作成した際に使用した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は他にもいろいろな値が取得できるっぽいので今後使ってみようと思います!

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1