我正在我的 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 委托(delegate) 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;
}
}
最佳答案
当您将叠加层添加到 mapView 时,您可以选择将其放置在叠加层列表中的位置。由于叠加层只能在列表中出现,您只需在所需位置再次插入即可移动它。由于您希望它位于顶部,因此这应该有效:
[mapView insertOverlay:overlay atIndex:[mapView.overlays count]];
你不应该调用 viewForOverlay。把它留给 iOS。如果您需要为叠加层着色,请在 viewForOverlay 中进行,因为 iOS 可以并且会在需要时调用它,如果您返回一个非彩色叠加层,它将绘制它。
关于ios - 将 MKPolygon 带到前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15420761/