Pregunta

Estoy tratando de implementar un volumen de control similar al botón redondo. Actualmente puedo detectar golpes por el gesto aprendidos. ¿Cómo puedo detectar un gesto circular (en sentido horario y anti-horario) en el botón? Gracias!

¿Fue útil?

Solución

¿Está buscando un gesto de un solo toque (como un control deslizante circular), o un gesto de dos táctil (como agarrar y girar un mando en el mundo real)? En este último caso, echar un vistazo a UIRotationGestureRecognizer .

En el primer caso, que está bastante por su cuenta. Por supuesto que puede implementar su solución como su propio reconocedor gesto personalizado: se espera por parte de Apple, y no hay parte de la documentación para que pueda empezar (aunque no he visto muchos ejemplos de trabajo por ahí). Véase también Cómo correctamente subclase UIGestureRecognizer .

Como un enfoque general, pensaría de la región para el gesto como una forma de rosquilla: una zona con el centro c , radio interior r1 , y el radio exterior r2 . Cuando el usuario toca abajo se puede calcular la distancia desde c usando el teorema de Pitágoras, y el ángulo con su función trigonométrica favorito. Con esto, se puede determinar si el contacto está dentro de la zona. A medida que el usuario arrastra, puede actualizar el valor de control basado en el ángulo. En algún momento, ya sea que van a retocar, o fuera de la fricción de la zona, y que terminarán el gesto. Sugiero que permite al tacto se desvíe bastante lejos en el interior r1 o fuera de r2 . Dedos son imprecisas herramientas

Otros consejos

Como no encontrar una solución, y por inspiración lógica de la respuesta @ Sixten, me he ido y creó algo útil, no es a prueba de balas, pero parece hacer lo que necesito por ahora.

Por favor, cualquier persona, tenedor que, clon, usarlo, mejorarlo, es de código abierto, aquí está mi enlace de recompra:

https://bitbucket.org/danielphillips/dpcirculargesturerecognizer

¿Usted ha intentado escribir su propio reconocedor gesto? Hay instrucciones detalladas en los documentos.

La mejor manera sería poner en práctica personalizada de gestos aprendidos. No sé si lo desea para detectar un gesto discreto (método de control de eventos se llama una vez que se ha detectado el círculo completo) o una continúa Gesto (método de control de eventos se llama cada vez que se mueve el dedo sobre una trayectoria circular).

Probablemente, el usuario no puede dibujar un círculo perfecto, y la solución aportada por @Sixten Otto sería bueno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top