In my app I have a number of small subviews. When the user taps a subview, I place one separate view over top of the tapped subview (same size) and then animate this separa
After calling setNeedsDisplay it may take a moment for the drawRect to get called. Start your animation with a short (0.1f) delay. You could also call the animation method from [self performSelector:withObject:afterDelay:] to add the delay if that's easier.