2009-03-14 5 views

답변

0

아이폰 SDK 자체에 익숙하지 않아 비표준 제스처 캡처 기능이 내장되어 있는지 확실하지 않습니다. 그러나 여기에서 할 수있는 수동 방법 중 하나가 있습니다.

This tutorial은 플래시 용이지만 동일한 제스처 원칙에 따라 작동합니다. 각 방향은 숫자를 나타냅니다. 포인팅 장치를 사용하여 원을 따라 가면 시간 경과에 따라 이동 한 방향을 나타내는 일련의 숫자가 생성됩니다. 해당 숫자 순서를 원을 나타내는 미리 정의 된 순서와 비교하십시오. 일치하면 이벤트를 시작하십시오.

제스처를 "퍼지 (fuzzy)"처럼 만드는 방법을 설명하는 튜토리얼이 많아서 덜 정밀한 포인트 동작이 필요합니다.

1

특정 경우처럼 구현하기가 쉽습니다. 입력 영역을 네 사분면으로 나누고 각 사분면을 통해 위치를 추적합니다. 퀀란 트 랜트의 순서는 그들이 원을 완료했거나 여행했는지 여부를 결정합니다.

static touchKeeper; //touch, quadrant 
static touchIndex=0; 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[allTouches allObjects] objectAtIndex:0]; 
    touchKeeper[touchIndex].touch = touch; 
    touchKepper[touchIndex].quadrant = DetectQuadrant(touch)); 
    if (touchIndex > 3 && (touchKeeper[3].quadrant == touchKeeper[2].quadrant+1 == touchKeeper[1].quadrant+2 == touchKeeper[0].quadrant+3)) { 
    [self doCircleAction]; 
    touchIndex=0; 
    } 
    else touchIndex++; 
} 

아이디어는 당신이 단지 대략 영역에 특정 터치를 식별 할 필요가있다 :

의사 코드는 생각을 설명합니다. 그래서 사분면 루틴은 다음과 같이합니다 :

int DetectQuadrant(UITouch *touch) { 
CGPoint point; 
point = [touch locationInView:self]; 
if (endPoint.x > X1 && endPoint.x < X2 && endPoint.Y > Y1 && endPoint.Y < Y2) 
    return QUAD1; 
} else etc 

나는 예를 들어 사분면을 사용 - 명확하게 사각형을 그리고 생각할 수있는 '원!'. Detect 메서드에서 더 많은 영역을 만들면 정확도가 향상됩니다. 주요 개념은 과도한 복잡성 (베 지어 곡선 감지 또는 유사한 말도 안 함)없이 원하는 동작을 달성하기 위해 영역 시퀀스로 생각하는 것입니다. 이 의사 코드는 확실히 잔인한 것이므로 구현을 기교있게 만드는 좋은 방법이있을 것이라고 확신합니다. 나는 내가 연구하고있는 프로젝트에 대한 '원 운동 감지 (circular motion detection)'에 대해 생각 해왔다. 그리고 이것은 내가 생각해 낸 거친 생각이었다.

즐기십시오!

+0

크레딧을 지불해야하는 크레디트. 이 아이디어는 문자를 식별하는 데 몇 가지 고유 한 포인트 만 필요하다는 연구 결과가있는 문자 및 필기 감지에 대한 IBM의 보고서를 기반으로합니다. 따라서 'E'를 추적하는 대신 OCR은 가장 적은 고유 위치를 찾습니다. –

관련 문제