Как обнаружить движение по кругу с помощью UIGestureRecognizer - PullRequest
4 голосов
/ 30 апреля 2011

Я хочу быть в состоянии обнаружить, что чей-то палец рисует круговое движение на экране - как если бы он рисовал букву «О».Возможно ли это с UIGestureRecognizer?

Ответы [ 6 ]

4 голосов
/ 30 апреля 2011

Я думаю, что ответ на это зависит от вашего определения кругового движения и от того, как вы собираетесь его использовать. Например, вы хотите знать, сколько градусов по кругу прошел пользовательский палец? Или вас интересует только завершение круга? Какая степень точности вам нужна? Вы хотите, чтобы движение было прервано, или это должно быть скорее касание> нарисовать круг> касание (другими словами, одно движение)?

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

Другой подход заключается в сохранении точек между касанием и касанием и выполнением некоторой фильтрации и подгонки кривой, чтобы выяснить, какая форма аппроксимируется точками. Сначала фильтр нижних частот с использованием базового фильтра FIR, а затем посмотрите на dx и dy от точки к точке. Круг (как серия дуг) должен попадать в определенный диапазон изменения уклона от точки к точке, в противном случае у вас есть другая форма.

Еще один подход заключается в использовании нейронной сети, чтобы взять точки и сказать вам, как выглядит форма.

2 голосов
/ 30 апреля 2011

Я думаю, это может быть то, что вам нужно

Как определить круговой жест с помощью Gesture Recognizer?

1 голос
/ 30 апреля 2011

Мой ответ на мой вопрос:

Я использовал это: http://iphonedevelopment.blogspot.com/2009/04/detecting-circle-gesture.html

.. но превратил CircleView в пользовательский UIGestureRecognizer. Все прекрасно.

1 голос
/ 30 апреля 2011

Вместо использования распознавателя жестов этот проект реагирует на круговые движения, отслеживающие угол событий UITouch.

0 голосов
/ 25 февраля 2014

Вот как мне нужно было сделать это, используя обратные вызовы touch в моем контроллере вида, но это тоже можно сделать жестом.Обратите внимание, что я пытался обнаружить несколько круговых движений (2 или более кругов по часовой стрелке или против часовой стрелки, сделанных во время события касания.

  1. Сохранить touchesMoved CGPoints в массиве.
  2. Создать мин /Максимальный прямоугольник всех точек в вашем массиве истории.
  3. Разделите этот минимальный / максимальный прямоугольник на 4 меньших ряда.
  4. Назначьте каждой исторической точке квадрант, используя CGRectContainsPoint () для каждого из 4 квадрантов.
  5. Движение по часовой стрелке будет иметь восходящие квадранты. Движение против часовой стрелки будет иметь нисходящие квадранты.
  6. Проверьте соотношение ширины / высоты, если вы хотите обнаружить круги и овалы
0 голосов
/ 30 апреля 2011

Нет, изначально не распознается круговое движение. Вы должны реализовать свой собственный метод для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...