我有一个MapView,我在上面放了一些覆盖层(MKPolygon)。
我必须维护MKPolygon组。
为此,我有一个PolyGonGroupClass,它保留每个多边形以及应该用来显示所有这些多边形的颜色和alpha。
因此,每次我找到一个多边形时,我都会将其作为地图叠加添加并记忆到正确的多边形组中。
我的所有聚类组都是一个实例变量。
[self.mapView addOverlay:poly];
[thecorrectpolygroup addObject:poly];
...
[self.mypolygroups addObject:thecorrectpolygroup];
@interface PolyGonGroupClass : NSObject {
UIColor* __color;
float __alpha;
NSMutableArray* __polygons;
}好吧..。
在这一点上,我如何告诉MapView每个多边形的颜色和alpha,并在其中一种颜色发生变化时即时更新它们?
我找到了一个- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay方法,但我不知道如何使用它来检索我输入到记忆中的值。
我想我应该使用overlay参数,但我如何检索与该覆盖相对应的正确的多边形组?
发布于 2011-06-22 02:14:44
在viewForOverlay中,您可以遍历mypolygroups数组并检查覆盖是否在该组的polygons数组中:
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
if ([overlay isKindOfClass:[MKPolygon class]])
{
MKPolygonView *pv = [[[MKPolygonView alloc] initWithPolygon:overlay] autorelease];
for (PolyGonGroupClass *pgc in mypolygroups)
{
if ([pgc.polygons containsObject:overlay])
{
pv.fillColor = pgc.color;
pv.alpha = pgc.alpha;
break;
}
}
return pv;
}
return nil;
}然而,,为了让它正常工作,你必须稍微改变一下你调用addOverlay的位置。在您所显示的代码中,您在将组添加到多边形数组和将组添加到mypolygroups数组之前调用了addOverlay。这可能会导致在数组包含数据之前触发viewForOverlay。
相反,在mypolygroups阵列完全填充之后,只将addOverlay调用移动到。所以在将最后一个组添加到mypolygroups之后
...
[self.mypolygroups addObject:theLastPolygroup];
for (PolyGonGroupClass *pgc in mypolygroups)
{
for (MKPolygon *p in pgc.polygons)
{
[mapView addOverlay:p];
}
}最后,要在组已经在地图上之后更新组的颜色和alpha,您可以这样做:
//pgc is some instance of PolyGonGroupClass
pgc.alpha = newAlpha;
pgc.color = newColor;
for (MKPolygon *p in pgc.polygons)
{
MKPolygonView *pv = (MKPolygonView *)[mapView viewForOverlay:p];
pv.alpha = pgc.alpha;
pv.fillColor = pgc.color;
}https://stackoverflow.com/questions/6423487
复制相似问题