¿Cómo se determina el valor de la escala UIPinchGestureRecognizer?

Me preguntaba si alguien sabe cómo se determina el valor de la escala UIPinchGestureRecognizer , o si hay una fórmula que podría usar para calcular un nuevo valor de escala.

Tengo una aplicación donde adjunto un UIPinchGestureRecognizer a un imageView , y en ciertos casos específicos, necesito reajustar manualmente una escala si networkinguce la imageView modo que pase un cierto punto de la pantalla. Gracias.

Dado dos puntos iniciales (toques), calcule la distancia entre ellos usando el teorema de Pitágoras. Deje que esta distancia se llame la "initial distance" .

Para cada actualización sucesiva de los puntos, vuelva a calcular la distancia entre los puntos y deje que esta distancia se llame la "new distance" .

 scale = "new distance" / "initial distance". 

En caso de que alguien no sepa … el teorema de Pitágoras es:

sqrtf(powf(bx - ax, 2.0f) + powf(by - ay, 2.0f))

Es fácil de entender la fórmula de escala … si tus dedos están dos veces más separados que cuando empezaste a pellizcar, el zoom debería ser 2.0 (2x), así que conecta algunos numbers … 50px aparte inicialmente … 100px aparte ahora = 100/50 = 2

Descubrí lo que necesitaba haciendo una pequeña ingeniería inversa. Como la mayoría de ustedes sabe que han implementado un método de escala con el UIPinchGestureRecognizer, finalmente termina con esta línea de código:

 GFloat nextScale = 1 - (previousScale - [sender scale]); 

Esta es la siguiente escala calculada sobre el valor dado por el UIPinchGestureRecognizer, sin embargo, necesitaba hacer mi propia escala personalizada ya que el usuario había escalado más allá del límite que configuré. Así que determiné el ancho que necesitaba que mi image se encogiera, y determiné la escala ajustada que necesitaba configurándola como una proporción: (nextScale / adjustedScale) = (nextWidth / adjustedWidth).

Luego reinserté la escala ajustada en la fórmula anterior para determinar cuál sería la [escala del remitente] para mi nueva escala: [escala del remitente] = Escala ajustada – 1 – escala previa.

Así que ahora puedo usar esa cantidad para establecer el valor anterior de Escala que necesitaré para la próxima vez.