Pregunta

Ahora mismo tengo un cuello de botella en mi programa que estoy tratando de escribir. Estoy tratando de utilizar un gesto de pellizcar para controlar la escala de un UIImage. el cálculo de la escala que está causando el programa para reducir la velocidad y convertido en picado. a continuación es la ecuación.

currentScale = (currentDistance / initialDistance) * scaleMod;

scaleMod es lo que cada vez la escala actual era el usuario tomó sus dedos fuera de la pantalla. por lo que la próxima vez que el usuario hace una pizca de la antigua escala es esencialmente el punto de partida de la nueva acción de escala.

¿Fue útil?

Solución

1) ¿No puedes calcular scaleMod / initialDistance una vez mientras currentDistance está cambiando. De esta manera es suficiente con hacer que los tiempos de valor currentDistance, que elimina una brecha.

2) Asegúrese de que esto es en realidad el cuello de botella. Lo más probable es que no, a menos que su haciendo algo realmente malo.

Otros consejos

Para cualquier tipo de los tres VARs, este cálculo puede fácilmente ser hecho millones de veces por segundo con poco impacto en el rendimiento. Su problema está en otra parte.

Si usted fija el scaleMod y initialDistance a potencias de 2 que podría utilizar para turnos más rápida multiplicación y división.

aquí por referencia .

Se puede almacenar scaleMod / initialDistance. Cuando la escala está activo (los dedos del usuario están todavía en la pantalla), multiplicar ese valor por currentDistance según sea necesario.

Una vez que el usuario tiene pellizcos terminado, almacenar el nuevo scaleMod / valor initialDistance para la próxima vez que ocurre pellizcos.

Si usted está haciendo el cálculo con int (u otro número entero), a ver si él puede hacerlo utilizando la precisión del flotador. De punto flotante brecha es más rápido que entero (menos bits para dividir, asumiendo que su CPU) tiene unidad de coma flotante).

Además, trate de factor de división a cabo como la multiplicación por un recíproco.

Compruebe que InitialDistance! = 0 primero! :)

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