使用 viewForOverlay return 一个 MKOverlayView 但我还需要 return 一个 MKCircleRenderer 在相同的方法

Using viewForOverlay to return an MKOverlayView but I also need to return an MKCircleRenderer in the same method

我有一个 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 已被弃用,我正在处理另一个问题。

问题是图块视图显然是 MKOverlayView 的子类(return 由 viewForOverlay 编辑),而 MKCircleRenderer 是更现代的 [=12] 的子类=],MKOverlayRenderer 的子类(return 由 rendererForOverlay 编辑),而不是 MKOverlayView.

的子类

我建议您可以将平铺视图设为 MKOverlayRenderer 子类而不是叠加视图。这样,您可以实现 rendererForOverlay 和 return 圆形渲染器或平铺渲染器,而不是 viewForOverlay