2009-07-10 17 views
11

¿Cómo se implementan los gestos de pellizco en el iPhone? Estoy familiarizado con el uso de eventos táctiles en el iPhone, pero soy extremadamente flojo y no quiero volver a inventar la rueda para algo tan generalizado como los gestos de PINCH ... El código fuente o enlaces a ellos serían útiles.¿Cómo hacer gestos de pellizco en el iPhone?

+1

mira esta muestra en el zoom de pellizco http://cocoabugs.blogspot.com/2011/03/pinch-zoom-using-uipinchgesturerecogniz.html –

Respuesta

8

Debe implementarlo usted mismo usando algunos cálculos básicos.

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; 

Esos son los métodos delegados que debe implementar en su aplicación.

Necesita obtener la distancia entre los dos toques, luego calcule los cambios en la distancia en su propio código.

La ecuación matemática que se utiliza para obtener la distancia se llama el dot product

sólo quiero señalar que la ecuación que utilizan en el tutorial citado es incorrecta. Lo he actualizado para incluir el valor absoluto que se pierde en el tutorial.

Este es el producto escalar:

- (CGFloat)distanceBetweenTwoPoints:(CGPoint)fromPoint toPoint:(CGPoint)toPoint 
{ 
    float xDist = fromPoint.x - toPoint.x; 
    float yDist = fromPoint.y - toPoint.y; 

    float result = sqrt(pow(xDist,2) + pow(yDist,2)); 
    return result; 
} 

Editar: he cometido un error en mi respuesta anterior .... que ha pasado un tiempo desde que he hecho alguna de esa clase de matemáticas.

Si no cuadra el resultado, no obtendrá la distancia real entre los puntos. Esto se llama calcular la magnitud entre dos vectores.

Esta es la forma correcta de hacerlo. Si quiere omitir el sqrt, no tendrá la distancia exacta entre los dos puntos.

Si no cuadra la respuesta, su código funcionará pero utilizará medidas que son mucho más grandes que los valores reales. Entonces, en el futuro, si necesita obtener la distancia entre los dos puntos, devolverá algo así como 90000 en lugar de la distancia de píxel real que sería de 300 px.

+0

Ummm ...No estoy seguro de cuánto puede ser útil ese enlace 'producto de puntos' que citó, pero gracias por una respuesta al menos ... – RexOnRoids

+0

Sin él, no puede calcular la distancia entre los dos toques. Es esencial. –

+0

Thx - El código fuente es mucho más fácil de entender en este caso ... No estaba preparado para sentarme e intentar absorber toda una página wiki sobre las complejidades del 'producto gráfico' LOL – RexOnRoids

1

Si está buscando un ejemplo de código simple del gesto de pellizco, utilizo el método descrito por Brock en la aplicación de ejemplo I describe here (en la penúltima y última versión de la aplicación en esa página). Los gestos de pellizco se usan para escalar un par de capas de Core Animation en ese ejemplo.

Todo lo que describe en cuanto al cálculo de distancia es simplemente el teorema de Pitágoras aplicado entre dos puntos (con las distancias X e Y como las dos caras de un triángulo rectángulo).

6

hmmm ..... parece que algunas personas están extremadamente confundidas sobre cómo usar las matemáticas básicas. el producto de punto es totalmente irrelevante y solo confunde los problemas. dot prod entre 2 vectores se usa para calcular el ángulo entre ellos.

Realmente necesita utilizar el teorema de pythagorus. No tiene NADA que ver con la búsqueda de distancia entre puntos, ¡solo pitagórico!

+0

dot se puede utilizar para encontrar la distancia entre dos puntos de la siguiente manera: sqrt (punto (p2-p1, p2-p1)) – twerdster

8

Bastante seguro de que las soluciones presentadas aquí han quedado obsoletas, a favor de usar la nueva clase UIPinchGestureRecognizer en iOS 3.2 y posterior.

+2

No es tan relevante siempre y cuando haya toneladas de <3,2 dispositivos por ahí. – Jonny

Cuestiones relacionadas