Как обнаружить круговой жест с помощью Gesture Recognizer? - PullRequest
11 голосов
/ 05 января 2011

Я пытаюсь реализовать круглую кнопку, похожую на регулятор громкости. В настоящее время я могу обнаружить пролистывания с помощью Gesture Recognizer. Как я могу обнаружить круговой жест (по часовой стрелке и против часовой стрелки) на кнопке? Спасибо!

Ответы [ 4 ]

15 голосов
/ 05 января 2011

Вы ищете жест в одно касание (например, круговой слайдер) или жест в два касания (например, захват и поворот ручки реального мира)?Если последнее, взгляните на UIRotationGestureRecognizer.

Если первое, вы в значительной степени самостоятельно.Вы, безусловно, можете реализовать свое решение в качестве собственного собственного распознавателя жестов: это ожидается Apple, и есть некоторая документация, с которой можно начать (хотя я не видел там много работающих примеров).См. Также Как правильно создать подкласс UIGestureRecognizer .

В качестве общего подхода я бы подумала об области жеста как о форме пончика: зона с центром c , внутренний радиус r1 и внешний радиус r2 .Когда пользователь коснется, вы можете рассчитать расстояние от c , используя теорему Пифагора, и угол с вашей любимой функцией триггера.При этом вы можете определить, находится ли касание в зоне.Как пользователь перетаскивает, вы можете обновить значение элемента управления на основе угла.В какой-то момент они либо подправят, либо потянут за пределы зоны, и на этом жест закончится.Я предлагаю позволить касанию отклоняться довольно далеко внутри r1 или за пределами r2 : пальцы - неточные инструменты.

6 голосов
/ 21 августа 2012

Поскольку я не смог найти решение и, исходя из логического вдохновения из ответа @ sixten, я пошел и создал что-то полезное, это не пуленепробиваемое, но, похоже, оно делает то, что мне сейчас нужно.

Пожалуйста, кто-нибудь, раскошелиться, клонировать, использовать, улучшать, это с открытым исходным кодом, вот моя ссылка на репо:

https://bitbucket.org/danielphillips/dpcirculargesturerecognizer

0 голосов
/ 12 января 2012

Лучший способ - реализовать Custom Gesture Recognizer.Я не знаю, хотите ли вы обнаружить Discreet Gesture (метод обработки событий будет вызван после того, как будет обнаружен полный круг) или Continues Gesture (метод обработки событий будет вызываться каждый раз, когда вы перемещаете палец по круговому пути).

Возможно, пользователь не может нарисовать идеальный круг, и решение, предоставленное @Sixten Otto, будет хорошим.

0 голосов
/ 05 января 2011

Вы пытались написать свой собственный распознаватель жестов?В документации есть подробные инструкции.

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