안녕하세요 이번 포스팅은 가속도 센서 이용하기 입니다. 시뮬레이터가 아닌 디바이스의 가속도센서를 이용해 모션을 인식하도록 만들어보려고 합니다. 아래 사진과 같이 가속도 센서는 x,y,z의 세방향에 대한 가속도 크기를 측정할 수 있습니다. 예를 들어 사진상 왼쪽으로 힘이 가해지면 x는 음수를 나타낼것 입니다. |
|
디바이스 상태별 변화
아래 그림과 같이 디바이스 상태에 따라서 각 값이 변동됩니다. 그에 따라 핸드폰이 뒤집어 있는지 아닌지도 z값으로 확인 할 수 있습니다.
|
해당 포스팅은 x-code 9.2 로 작업되었습니다.
프로젝트 설정
Framework 추가하기
가속도 센서를 사용하려면 'CoreMotion.framework'를 추가해야합니다.
프로젝트 루트 디렉토리 - > Build Phases - > Link Binary With Libraries -> + - > 'CoreMotion.framework' 추가 , 다음 과 같은 화면이 나옵니다.
|
소스작업
헤더파일 임포트
프레임 워크를 사용하기 위해서 소스 파일에 헤더파일을 임포트 합니다.
#import <CoreMotion/CoreMotion.h>
가속도계 센서 설정
모션매니저를 선언하고 초기화 하고 큐를 초기화합니다.
@interface PlayViewController (){
CMMotionManager *motionManager;
}
...
motionManager=[[CMMotionManager alloc]init];//모션관리자
NSOperationQueue* queue=[[NSOperationQueue alloc]init];//모션관리자가 작업을 쌓아둘 큐
센서값 출력
아래 소스처럼 몇초 단위로 가속도 센서를 업데이트 할지 설정합니다. 0.1초 간격으로 정확하게 업데이트 되는게 아니라, 매 업데이트 시간이 0.1초가 안넘도록 하는 설정이라고 합니다. 즉 1초에 10번 이하로 업데이트가 됩니다.
if(motionManager.accelerometerAvailable){
//가속도계 사용 가능할 경우
motionManager.accelerometerUpdateInterval=1.0/10.0;//0.1초 단위로 업데이트
[motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData * accelerometer, NSError *error)
{
if(error){
//에러인 경우 가속도계 센서 정지
[motionManager stopAccelerometerUpdates];
}else{
NSLog(@"x=%.2f, y=%.2f, z=%.2f",accelerometer.acceleration.x,accelerometer.acceleration.y,accelerometer.acceleration.z);
}
}
];
}else{
speedLabel.text=@"가속도 센서 사용 불가 ";
}
다음과 같이 작성하면 로그를 확인 했을때 방향에 따라 값이 달라지는 것을 확인할 수 있습니다.
저는 테스트 결과 핸드폰을 눞힌 상태에서 앱을 사용하도록 유도 할 예정이기 때문에 x 값의 수치에 따라 앉았는지 아닌지를 인식하도록 했습니다.
추가적으로 각자 정밀한 테스트 후 원하시는 값으로 설정하시는걸 추천합니다. 제 코드는 참고용 입니다.
※해당 포스팅은 지극히 주관적인 내용으로 저자의 복기 목적으로 작성된 것이고, 내용에대해 수정이나 추가 요청은 언제든 환영합니다.
'아이폰 > 앱 만들기' 카테고리의 다른 글
[Object-c] 3. 슬라이드 메뉴 만들기 (0) | 2017.12.21 |
---|---|
[Object-c] 2. 스플래시 화면 만들기( 앱 만들기 ) (0) | 2017.12.20 |
[Object-c] 1. 설계하기(앱 만들기) (0) | 2017.12.19 |
[Object-c] 앱 만들기 (0) | 2017.12.19 |