背景
デバイスを回転させた時の情報を取得する際、通常であれば、 NotificationCenter
や viewWillTransition
を使用すれば簡単に出来るのですが、デバイスの設定で回転をロックしている場合、これらの方法では回転の情報を取得することが出来ませんでした。
そこで、色々と調べた結果、CoreMotionを使用することで回転情報の取得が出来ることが分かったので、メモしておきたいと思います。
CoreMotionを使用した取得方法
import CoreMotion
var motionManager: CMMotionManager!
class ViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.2
motionManager.startAccelerometerUpdates( to: OperationQueue() ) { p, _ in
if p != nil {
if let acceleration = p?.acceleration {
let d =
fabs( acceleration.y ) < fabs( acceleration.x )
? acceleration.x > 0 ? "Right" : "Left"
: acceleration.y > 0 ? "Down" : "Up"
print(d)
}
}
}
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
motionManager.stopAccelerometerUpdates()
}
}
CMMotionManagerを使用し、一定時間毎にAccelerometerを更新することで、ロックしていても無事回転をチェックすることが出来ました。