2011-03-06 2 views
21

자이로 스코프/가속도계가 특정 양을 활성화 할 때를 감지해야합니다. 기본적으로 장치의 움직임이있을 때 감지합니다. 나는 Core Motion에 대해 아무것도 모른다.간단한 iPhone 모션 감지

누군가 나를 초보 자습서 나 다른 것으로 안내 할 수 있습니다.

미리 감사드립니다.

- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 

그런 다음 당신은 모션 감지 기능을 구현할 수 있습니다 : 당신이 첫 번째로 반응 할 수있다

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self becomeFirstResponder]; 
} 

을 그리고 있는지 확인하십시오

답변

34

나는 Core Motion을 사용해야한다고 생각합니다. 좋은 소식은 문제 도메인에 사용하는 것이 그리 어렵지 않다는 것입니다. Event Handling Guide, 특히 처리 된 장치 - 동작 데이터 처리 섹션을 읽기 시작하십시오. 약간의 움직임이 있었기를 원하는 분은 앞에서 말씀 드린대로 CMDeviceMotion.userAcceleration에서 회전 처리 및 신호 처리를 생략 할 수 있습니다. 이것은 모든 회전이 가속도계 신호를 발생시키기 때문입니다. 그거야 기본적으로

float accelerationThreshold = 0.2; // or whatever is appropriate - play around with different values 
CMAcceleration userAcceleration = deviceMotion.userAcceleration; 
if (fabs(userAcceleration.x) > accelerationThreshold) 
    || fabs(userAcceleration.y) > accelerationThreshold 
    || fabs(userAcceleration.z) > accelerationThreshold) { 
    // enter code here 
} 

: 뭔가를해야 startDeviceMotionUpdatesToQueue:withHandler: 귀하의 CMDeviceMotionHandler에 설명 된대로

CMDeviceMotionHandler을 만듭니다. 모든 가속에는 대응이있을 것이라는 점을 명심하십시오. 즉, 장치를 오른쪽으로 이동 (즉 가속)하는 힘을 적용하면 감속 장치가 작동을 멈추고 장치가 새로운 위치에 놓이게 할 수 있습니다. 따라서 귀하의 if 조건은 매 모션마다 두 번 true가됩니다.

+0

당신이 준 링크는 훌륭합니다! 모션 리딩을 검색하고 모든 관련 클래스 참조를 읽었음에도 - 나는 그런 요약을 찾을 수 없었습니다. - 감사합니다! –

+0

간단하고 이해하기 쉬운 방법으로 설명해 주셔서 감사합니다. – Luqman

+1

이 링크는 작동하지 않습니다 "처리 된 장치 - 동작 데이터 처리"링크를 업데이트 할 수 있습니까? – bpolat

2

viewDidAppear에서 첫 번째 응답자가된다.

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{ 
    if (event.subtype == UIEventTypeMotion){ 
     //there was motion 
    } 
}