[swift] Swift Core Motion에서 주변 기기와 동작 감지하기

Swift Core Motion은 iOS 기기의 센서 데이터에 액세스하여 주변 기기 및 사용자 동작을 감지하는 강력한 프레임워크입니다. 이를 통해 가속도계, 자이로스코프, 자력계 등의 센서 데이터를 얻을 수 있으며, 이를 활용하여 다양한 애플리케이션을 개발할 수 있습니다.

Core Motion 설정하기

Core Motion을 사용하기 위해 프로젝트에 다음과 같이 Core Motion 프레임워크를 추가해야 합니다. 프로젝트 탐색기에서 프로젝트 파일을 선택한 다음, Build Phases 탭으로 이동하여 “Link Binary With Libraries” 섹션에서 “+” 버튼을 클릭한 다음 ‘CoreMotion.framework’를 추가합니다.

주변 기기 감지하기

주변 기기를 감지하는 가장 간단한 방법은 CMMotionManager 클래스를 사용하는 것입니다. 이 클래스는 읽기전용 프로퍼티 및 메서드를 통해 주변 기기의 센서 데이터에 액세스할 수 있는 기능을 제공합니다.

import CoreMotion

let motionManager = CMMotionManager()

if motionManager.isDeviceMotionAvailable {
    motionManager.deviceMotionUpdateInterval = 0.1 // 업데이트 주기 (초)
    
    motionManager.startDeviceMotionUpdates(to: .main) { (motionData, error) in
        guard let motionData = motionData else {
            if let error = error {
                print("Error: \(error.localizedDescription)")
            }
            return
        }
        
        let attitude = motionData.attitude // 기울기
        
        // 기울기 정보 활용
        let roll = attitude.roll // 롤
        let pitch = attitude.pitch // 피치
        let yaw = attitude.yaw // 요
    }
}

위의 예제 코드에서 motionManager 객체를 생성한 후, isDeviceMotionAvailable 프로퍼티를 확인하여 주변 기기에서 센서 데이터를 읽을 수 있는 상태인지 확인합니다. 그런 다음 startDeviceMotionUpdates(to:withHandler:) 메서드를 호출하여 센서 데이터의 업데이트를 시작합니다. 업데이트 주기는 deviceMotionUpdateInterval 프로퍼티를 설정하여 지정할 수 있습니다.

수신한 센서 데이터는 motionData 매개변수를 통해 제공됩니다. 이 예제에서는 기울기 데이터를 활용하기 위해 attitude 프로퍼티를 사용하여 롤, 피치 및 요 값을 가져옵니다.

동작 감지하기

Core Motion은 또한 사용자의 동작을 감지하는 기능을 제공합니다. 예를 들어, 사용자가 장치를 흔들었을 때 이를 감지하여 특정 동작을 수행할 수 있습니다.

import CoreMotion

let motionManager = CMMotionManager()

if motionManager.isAccelerometerAvailable {
    motionManager.accelerometerUpdateInterval = 0.1 // 업데이트 주기 (초)
    
    motionManager.startAccelerometerUpdates(to: .main) { (accelerometerData, error) in
        guard let accelerometerData = accelerometerData else {
            if let error = error {
                print("Error: \(error.localizedDescription)")
            }
            return
        }
        
        let acceleration = accelerometerData.acceleration // 가속도
        
        // 가속도 정보 활용
        let x = acceleration.x // x축 가속도
        let y = acceleration.y // y축 가속도
        let z = acceleration.z // z축 가속도
    }
}

위의 예제 코드에서도 motionManager 객체를 생성한 후 isAccelerometerAvailable 프로퍼티를 확인하여 가속도계 데이터를 읽을 수 있는 상태인지 확인합니다. 그런 다음 startAccelerometerUpdates(to:withHandler:) 메서드를 호출하여 가속도계 데이터의 업데이트를 시작합니다. 업데이트 주기는 accelerometerUpdateInterval 프로퍼티를 설정하여 지정할 수 있습니다.

수신한 가속도계 데이터는 accelerometerData 매개변수를 통해 제공됩니다. 이 예제에서는 가속도 데이터를 활용하기 위해 acceleration 프로퍼티를 사용하여 x, y 및 z 축의 가속도 값을 가져옵니다.

결론

Swift Core Motion은 iOS 기기의 센서 데이터에 액세스하여 주변 기기와 사용자 동작을 감지할 수 있는 강력한 프레임워크입니다. 이 글에서는 주변 기기와 사용자 동작을 감지하는 기본적인 방법에 대해 알아보았습니다. Core Motion은 다양한 애플리케이션 개발 시나리오에서 유용하게 활용될 수 있으며, 자세한 내용은 Apple 공식 문서를 참조하십시오.