【问题标题】:Using viewForOverlay to return an MKOverlayView but I also need to return an MKCircleRenderer in the same method使用 viewForOverlay 返回一个 MKOverlayView 但我还需要以相同的方法返回一个 MKCircleRenderer
【发布时间】:2016-09-12 09:14:29
【问题描述】:

我有一个MKMapView,我需要在上面显示两种类型的叠加层。一个是平铺覆盖,我使用MKOverlayViewMKCircleRenderer 的子类。

我的方法是: - (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 已被弃用,我正在将其作为另一个问题处理。

【问题讨论】:

  • 您能否将您的平铺视图设为MKOverlayRenderer 而不是叠加视图?然后你可以实现rendererForOverlay 而不是viewForOverlay 然后你可以从一个方法中返回两个渲染器。
  • 帮助很大!谢谢@Rob!我刚刚让我的TileOverlayView 成为MKOverlayRenderer 的子类,一切都很好!如果您想提交作为答案,我可以接受:)

标签: ios xcode mkmapview mkoverlay mkcircle


【解决方案1】:

问题是平铺视图显然是MKOverlayView 的子类(由viewForOverlay 返回),而MKCircleRenderer 是更现代的MKCircleRenderer 的子类,MKOverlayRenderer 的子类(由rendererForOverlay 返回),而不是MKOverlayView

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-13
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2017-08-05
    相关资源
    最近更新 更多