将MKPolygon带到前面

时间:2013-03-14 21:43:08

标签: ios objective-c mkmapview

我在MKMapView中绘制了一堆MKPolygons。其中一些是彼此叠加的。如何将选定的多边形带到顶部/前部?

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

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];

并将其替换为克雷格建议的内容:

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

1 个答案:

答案 0 :(得分:1)

将贴图添加到mapView时,您可以选择将其放置在叠加列表中的位置。由于叠加只能在列表中,只需再次插入所需位置即可移动它。既然你想要它在顶部,这应该工作:

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

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