This was a really useful workaround idea, thanks! - however I notice when I'm rendering my overlays to my own UIView layer, and use mapViewDidChangeVisibleRegion(MKMapView) to call setNeedsDisplay() on said UIView, that there's a "drifting" effect on the overlay graphics as I pan or zoom the map around. My guess is it's because mapViewDidChange...() is called after the map change on the UI thread, but needsDisplay won't be honoured by the overlayed UIView until at least the next UI thread tick, so there's a delay between them? Is this something people have successfully dealt with?