NSTimers are not guaranteed to fire exactly on time. I believe because your timer is on the main thread it is delayed by other activity on the main thread such as zooming.
This might be helpful Stack Question
You might what to try running the timer on a background run loop.
N.B if you are updating the UI you have to do this on the main thread.
Also you might want to consider changing the tolerance (iOS 7) NSTimer