1

我有一个MKMapView需要显示两种类型的叠加层。一个是平铺覆盖层,我使用一个子类MKOverlayView和一个MKCircleRenderer.

我的方法是: - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay但现在我还需要渲染一个MKCircle编译器错误:'不兼容的指针类型从结果类型为'MKOverlayView * _Nonnull'的函数返回'MKCircleRenderer *'。

- (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;
    }
}

那是我的代码,我知道它initWithOverlay已被弃用,我正在处理另一个问题。

4

1 回答 1

0

问题是 tile 视图显然是MKOverlayView(returned by viewForOverlay)的MKCircleRenderer子类,而更现代MKCircleRenderer的子类是MKOverlayRenderer(returned by rendererForOverlay) 的子类,而不是 的子类MKOverlayView

我建议您可以使您的平铺视图成为MKOverlayRenderer子类而不是覆盖视图。这样viewForOverlay,您可以实现rendererForOverlay并返回圆形渲染器或平铺渲染器,而不是 。

于 2016-09-12T10:21:39.160 回答