Nic Hubbard Nic Hubbard - 3 months ago 40
iOS Question

iOS: Notification when MKMapView is loaded and annotations/overlays are added?

I am aware of the delegate methods used to let me know when the map has loaded and annotations and overlays have been added. (

mapViewDidFinishLoadingMap:
mapView:didAddAnnotationViews:
mapView:didAddOverlayViews:
)

I am wanting to create a
UIImage
from my
MKMapView
once everything has loaded. Currently I am creating my
UIImage
once
mapView:didAddOverlayViews:
is called, but this is not always reliable, because sometimes the overlay take longer to be added, sometimes
mapViewDidFinishLoadingMap:
is called more than once or it takes a long time to load. Sometimes it is NOT called because tiles are cached. So, it is very hard to know exactly when everything has loaded. I have tried using a timer but that doesn't make it reliable either.

My question is, how can I know when everything has completely loaded, including all map tiles, all annotations and all overlays?

Answer

It's an old question, but if you're using iOS 7 just use the mapView mapViewDidFinishRenderingMap delegate.

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
{
    // Image creation code here

}