2011-01-05 7 views

Respuesta

15

¿Está buscando un gesto de un toque (como un control deslizante circular), o un gesto de dos toques (como agarrar y girar un mando del mundo real)? Si es este último, eche un vistazo a UIRotationGestureRecognizer.

Si el primero, estás más o menos solo. Ciertamente puede implementar su solución como su propio reconocedor de gestos personalizado: Apple lo espera, y está some documentation to get you started (aunque no he visto muchos ejemplos que funcionen). Vea también How to correctly subclass 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 hacia abajo puede calcular la distancia desde c usando el teorema de Pitágoras y el ángulo con su función de trigonometría favorita. Con eso, puedes determinar si el toque está dentro de la zona. A medida que el usuario arrastra, puede actualizar el valor de control según el ángulo. En algún momento, retocarán o arrastrarán fuera de la zona, y eso terminará el gesto. Sugiero permitir que el toque se desvíe bastante adentro de r1 o fuera de r2: los dedos son herramientas imprecisas.

+0

Un gesto de un solo toque (como un control deslizante circular). – ohho

+0

Entonces, de todos modos, no hay mucho en el camino de una solución enlatada, de Apple. Como sugiere Alexsander Akers, escribir tu propio reconocedor puede ser el camino a seguir. Editaré un poco más a mi respuesta en breve. –

+1

¡Me gusta mucho la solución de donuts! : D –

0

¿Has probado a escribir tu propio reconocedor de gestos? Hay instrucciones detalladas en los documentos.

0

La mejor manera sería implementar Reconocedor de gestos personalizado. No sé si deseas detectar un Gesto discreto (se llamaría el método de Gestión de eventos una vez que se haya detectado el círculo completo) o un Gesto de continuación (se llamaría el método de Gestión de eventos cada vez que mueves el dedo sobre un Camino circular).

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

6

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

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

https://bitbucket.org/danielphillips/dpcirculargesturerecognizer

+1

Hola Daniel, gracias por el código. Sería genial si hubiera un archivo de licencia, o las licencias se incluyen en el código, solo para fines de contabilidad. – farski

+0

Lo investigaré – Daniel

+0

@Daniel - genial, ¡acabo de probarlo y funciona totalmente bien! :) – sabiland

Cuestiones relacionadas