Как обнаружить круговой жест через опознание жеста?
-
25-09-2019 - |
Вопрос
Я пытаюсь реализовать громкость-контрольную круглую кнопку. В настоящее время я могу определить Swipes по упорству жеста. Как я могу обнаружить круговой жест (по часовой стрелке и против часовой стрелки) на кнопке? Спасибо!
Решение
Вы ищете жест об одном касании (как круговой слайдер) или жест двух касаний (например, захватывать и поворачивая ручку по реальной миру)? Если последний, посмотрите на UIRotationGestureRecognizer
.
Если бывший, ты в значительной степени самостоятельно. Вы, безусловно, можете реализовать ваше решение в качестве собственного пользовательского распознавания жеста: это ожидается Apple, и есть некоторая документация, чтобы заставить вас начаться (Хотя я не видел много рабочих примеров там). Смотрите также Как правильно подкласс UigestureCognizer.
Как общий подход, я бы подумал о регионе для жеста как форма пончика: зона с центром слияние, внутренний радиус R1, и внешний радиус R2. Отказ Когда пользователь касается, вы можете рассчитать расстояние от слияние Используя теорему Пифагорена и угол с вашей любимой функцией Trig. С этим вы можете определить, находится ли связь в зоне. Как пользователь перетаскивает, вы можете обновить значение управления на основе угла. В какой-то момент они либо касаются, либо затрагивают за пределами зоны, и это заканчивает жест. Я предлагаю позволить прикосновению к безблую далеко R1 или снаружи R2: пальцы неточные инструменты.
Другие советы
Как не в состоянии найти решение, и логическое вдохновение от ответа @ Sixten, я ушел и создал что-то полезное, это не доказательство, но, похоже, делает то, что мне нужно сейчас.
Пожалуйста, когда-нибудь, вилка, клонировать его, используйте его, улучшите его, это открытый источник, вот моя ссылка REPO:
https://bitbucket.org/danielphillips/dpcircularsgillipsegrizer.
Вы пытались написать свой собственный распознатель жеста? В документах есть подробные инструкции.
Лучший способ будет реализовать пользовательские жесты. Я не знаю, если вы хотите определить жесткий жест (метод обработки событий будет вызываться после обнаружения полного круга) или A продолжает жест (метод обработки событий будет называться каждый раз, когда вы перемещаете палец на круговой путь).
Возможно, пользователю не может нарисовать идеальный круг, и решение, предоставленное @Sixten Otto, было бы хорошо.