Как определить, движется ли мышь / палец по определенному пути? - PullRequest
1 голос
/ 14 марта 2009

Я разрабатываю приложение для iPhone и хочу определить, когда пользователь двигает пальцем по определенному пути.

В частности, я хочу определить, когда пользователь перемещает свой палец по определенному круговому пути.

Это, вероятно, было бы легко приспособить для обнаружения движения мыши по траектории.

Ответы [ 2 ]

1 голос
/ 14 марта 2009

Кажется, что конкретный случай может быть довольно простым для реализации. Разделите область ввода на четыре квадранта и отследите положение в каждом квадранте. Последовательность квандрантов определяет, завершили ли они или путешествовали по кругу.

Псевдокод для описания идеи:

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

Я использую квадранты в качестве примера - ясно, что вы могли бы нарисовать квадрат и подумать «круг!». Точность повышается за счет увеличения числа областей в методе обнаружения. Основная идея состоит в том, чтобы мыслить в терминах последовательностей областей, чтобы достичь желаемого поведения без чрезмерных усложнений (таких как обнаружение кривой Безье или подобная ерунда). Этот псевдокод, безусловно, грубоват, и я уверен, что есть хороший способ отточить реализацию. Я думал о «обнаружении кругового движения» для проекта, над которым я работаю, и это была грубая идея, с которой я пришел.

Наслаждайтесь!

0 голосов
/ 14 марта 2009

Поскольку я не знаком с самим iPhone SDK, я не уверен, есть ли встроенные средства для захвата нестандартных жестов. Однако вот один из ручных способов сделать это.

Это руководство предназначено для Flash, но оно работает на тех же принципах жестов. Каждое направление представляет число. Отслеживание круга с помощью указательного устройства сгенерирует последовательность чисел, представляющих направления, пройденные во времени или на расстоянии, до вас. Сравните эту последовательность чисел с заранее определенной последовательностью, представляющей круг. Если они совпадают, запустите событие.

Существует множество учебных пособий, в которых объясняется, как сделать такие жесты "нечеткими", чтобы требовалось менее точное движение точек.

...