[swift] Swift로 Core Motion을 사용하는 방법

Core Motion은 iOS 기기에서 사용자의 동작 및 환경에 대한 정보를 제공하는 프레임워크입니다. 가속도계, 자이로스코프, 기압계 등의 하드웨어 센서를 통해 이동, 회전, 기기 방향 등의 데이터를 수집할 수 있습니다. 이번 튜토리얼에서는 Swift를 사용하여 Core Motion을 활용하는 방법을 알아보겠습니다.

Core Motion 프레임워크 가져오기

먼저, 프로젝트에 Core Motion 프레임워크를 가져와야 합니다. Xcode에서 프로젝트를 열고, Project Navigator에서 프로젝트 파일을 선택한 다음, Build Phases 탭으로 이동합니다. 여기서 Link Binary With Libraries 섹션을 찾고 + 버튼을 클릭하여 CoreMotion.framework을 추가합니다.

가속도계 데이터 사용하기

가속도계의 데이터를 사용하여 사용자의 이동을 감지할 수 있습니다.

  1. ViewController.swift 파일을 열고, import CoreMotion을 추가합니다.
  2. ViewController 클래스 내에 CMMotionManager 인스턴스를 생성합니다.
import CoreMotion

class ViewController: UIViewController {
    let motionManager = CMMotionManager()

    override func viewDidLoad() {
        super.viewDidLoad()
        // 가속도계를 사용할 준비
        if motionManager.isAccelerometerAvailable {
            motionManager.accelerometerUpdateInterval = 0.2
            // 가속도계 데이터 업데이트시 호출될 핸들러 설정
            motionManager.startAccelerometerUpdates(to: OperationQueue.current!) { (data, error) in
                if let accelerometerData = data {
                    // 가속도계 데이터를 사용하여 움직임 감지
                    let x = accelerometerData.acceleration.x
                    let y = accelerometerData.acceleration.y
                    let z = accelerometerData.acceleration.z
                    
                    // 움직임에 따른 작업 수행
                    if x > 0.5 {
                        print("오른쪽으로 이동")
                    } else if x < -0.5 {
                        print("왼쪽으로 이동")
                    } else if y > 0.5 {
                        print("아래로 이동")
                    } else if y < -0.5 {
                        print("위로 이동")
                    } else if z > 0.5 {
                        print("아래로 기울임")
                    } else if z < -0.5 {
                        print("위로 기울임")
                    }
                }
            }
        }
    }
}

위의 코드는 motionManager를 사용하여 가속도계 데이터를 업데이트하고, 데이터를 처리하는 핸들러를 정의합니다. 이 핸들러에서는 가속도계 데이터를 기반으로 사용자의 움직임을 감지하고, 해당하는 작업을 수행합니다.

자이로스코프 데이터 사용하기

자이로스코프 데이터를 사용하여 기기의 회전을 감지할 수 있습니다.

  1. ViewController.swift 파일에 import CoreMotion을 추가합니다.
  2. ViewController 클래스 내에 CMMotionManager 인스턴스를 생성합니다.
import CoreMotion

class ViewController: UIViewController {
    let motionManager = CMMotionManager()

    override func viewDidLoad() {
        super.viewDidLoad()
        // 자이로스코프를 사용할 준비
        if motionManager.isGyroAvailable {
            motionManager.gyroUpdateInterval = 0.2
            // 자이로스코프 데이터 업데이트시 호출될 핸들러 설정
            motionManager.startGyroUpdates(to: OperationQueue.current!) { (data, error) in
                if let gyroData = data {
                    // 자이로스코프 데이터를 사용하여 회전 감지
                    let x = gyroData.rotationRate.x
                    let y = gyroData.rotationRate.y
                    let z = gyroData.rotationRate.z
                    
                    // 회전에 따른 작업 수행
                    if x > 1.0 {
                        print("오른쪽으로 회전")
                    } else if x < -1.0 {
                        print("왼쪽으로 회전")
                    } else if y > 1.0 {
                        print("아래로 회전")
                    } else if y < -1.0 {
                        print("위로 회전")
                    } else if z > 1.0 {
                        print("시계 방향 회전")
                    } else if z < -1.0 {
                        print("반시계 방향 회전")
                    }
                }
            }
        }
    }
}

위의 코드는 motionManager를 사용하여 자이로스코프 데이터를 업데이트하고, 데이터를 처리하는 핸들러를 정의합니다. 이 핸들러에서는 자이로스코프 데이터를 기반으로 기기의 회전을 감지하고, 해당하는 작업을 수행합니다.

참고 자료