Question

right now i have a bottle neck in my program I'm trying to write. i am trying to use a pinch gesture to control the scale of a UIImage. its the calculation of the scale that is causing the program to slow down and become choppy. below is the equation.

currentScale = (currentDistance / initialDistance) * scaleMod;

scaleMod is what ever the current scale was the user took their fingers off the screen. so the next time the user does a pinch the old scale is essentially the starting point of the new scaling action.

Was it helpful?

Solution

1) Can't you calculate scaleMod / initialDistance once while currentDistance is changing. That way you only have do that value times currentDistance, which removes a divide.

2) Make sure that this is actually the bottleneck. It most likely isn't, unless your doing something really wrong.

OTHER TIPS

For any type of the three vars, this calculation can easily be done millions of times per second with little performance impact. Your problem is elsewhere.

If you fix the scaleMod and initialDistance to powers of 2 you could use shifts for faster multiplication and division.

See here for reference.

You could store scaleMod / initialDistance. When scaling is active (the user's fingers are still on the screen), multiply that value by currentDistance as needed.

Once the user has finished pinching, store the new scaleMod / initialDistance value for the next time pinching happens.

if you are doing computation with int (or other integer), see if he can do it using float precision. Floating-point divide is faster than integer (fewer bits to divide, assuming your CPU) has floating-point unit).

also, try to factor out division as multiplication by a reciprocal.

Check that InitialDistance != 0 first! :)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top