1

我在我的 MKMapView 中绘制了一堆 MKPolygons。它们中的一些相互重叠。如何将选定的多边形带到顶部/前面?

我尝试bringSubviewToFront:了从多边形层创建的 MKPolygonView:

MKPolygonView *view = (MKPolygonView *)[self.mapView viewForOverlay:polygon];

view.strokeColor = [UIColor orangeColor];

[self.mapView bringSubviewToFront:view];

解决方案:

我删除了

MKPolygonView *view = (MKPolygonView *)[self.mapView viewForOverlay:polygon];

view.strokeColor = [UIColor orangeColor];

[self.mapView bringSubviewToFront:view];

并将其替换为 Craig 建议的内容:

[self.mapView insertOverlay:polygon atIndex:self.mapView.overlays.count];

然后调用 MKMapKit 委托mapView:viewForOverlay:,然后我在那里处理颜色变化:

    - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
    if ([overlay isKindOfClass:[MKPolygon class]] && !((MKPolygon *)overlay).isSelected) {
        MKPolygonView*    aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay];

        aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2];
        aView.strokeColor = [UIColor yellowColor];
        aView.lineWidth = 3;

        return aView;
    }
    else if ([overlay isKindOfClass:[MKPolygon class]] && ((MKPolygon *)overlay).isSelected) {
        MKPolygonView*    aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay];

        aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2];
        aView.strokeColor = [UIColor orangeColor];
        aView.lineWidth = 3;

        return aView;
    }
}
4

1 回答 1

1

当您将叠加层添加到 mapView 时,您可以选择将其放置在叠加层列表中的位置。由于叠加层只能在列表中出现,您只需在所需位置再次插入即可移动它。由于您希望它位于顶部,因此应该可以:

[mapView insertOverlay:overlay atIndex:[mapView.overlays count]];

您不应该调用 viewForOverlay。把它留给iOS。如果您需要为叠加层着色,请在 viewForOverlay 中进行,因为 iOS 可以并且会在需要时调用它,并且如果您返回非彩色叠加层,它将绘制它。

于 2013-03-16T09:59:09.183 回答