1

I have an MKMapView that I need to display two types of overlay on. One is a tiled overlay that I use a subclass of MKOverlayView and an MKCircleRenderer.

My method is: - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay but now I need to also render an MKCircle I'm getting an compiler error of: 'Incompatible pointer types returning 'MKCircleRenderer *' from a function with result type 'MKOverlayView * _Nonnull'.

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{

    if ([overlay isKindOfClass:[MKCircle class]]) {
        MKCircleRenderer *circleView = [[MKCircleRenderer alloc] initWithOverlay:overlay];
        circleView.strokeColor = [UIColor redColor];
        circleView.fillColor = [[UIColor redColor] colorWithAlphaComponent:0.4];
        return circleView;
    } else {
        TileOverlayView *view = [[TileOverlayView alloc] initWithOverlay:overlay];
        view.tileAlpha = 1.0;
        return view;
    }
}

That is my code, I'm aware that initWithOverlay is deprecated which I'm working on as another issue.

  • Can you make your tile view a `MKOverlayRenderer` rather that an overlay view? Then you could implement `rendererForOverlay` rather than `viewForOverlay` And then you can return both renderers from a single method. – Rob Sep 12 '16 at 09:22
  • Great help! Thanks @Rob! I just made my `TileOverlayView` a subclass of `MKOverlayRenderer` and it's all working great! If you want to submit as an answer I can accept it :) – LeanneGamble Sep 12 '16 at 09:49

1 Answers1

0

The issue is that the tile view is apparently subclassing from MKOverlayView (returned by viewForOverlay), whereas MKCircleRenderer subclasses from the more modern MKCircleRenderer, a subclass of MKOverlayRenderer (returned by rendererForOverlay), not of MKOverlayView.

I'd suggest that you can make your tile view a MKOverlayRenderer subclass rather than an overlay view. That way, rather than viewForOverlay, you can implement rendererForOverlay and return either circle renderer or tile renderer.

Rob
  • 415,655
  • 72
  • 787
  • 1,044