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
The proper way to do this is to simply divide up your method.
Just call setNeedsDisplay, then return without animating. Wait until the drawRect that sets everything up correctly has finished its redraw, and then have it queue up another method that starts your desired animation (via queuing an operation or a notification). Then start the animation. This can all happen fairly quickly (at frame rate), and involves no extra (dangerous) recursive run loop calls or CATransaction calls (which may cause extra GPU setups).