首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iPhone - MapKit :如何动态自定义覆盖的颜色和alpha?

iPhone - MapKit :如何动态自定义覆盖的颜色和alpha?
EN

Stack Overflow用户
提问于 2011-06-21 17:59:50
回答 1查看 2.7K关注 0票数 1

我有一个MapView,我在上面放了一些覆盖层(MKPolygon)。

我必须维护MKPolygon组。

为此,我有一个PolyGonGroupClass,它保留每个多边形以及应该用来显示所有这些多边形的颜色和alpha。

因此,每次我找到一个多边形时,我都会将其作为地图叠加添加并记忆到正确的多边形组中。

我的所有聚类组都是一个实例变量。

代码语言:javascript
运行
复制
[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参数,但我如何检索与该覆盖相对应的正确的多边形组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-22 02:14:44

viewForOverlay中,您可以遍历mypolygroups数组并检查覆盖是否在该组的polygons数组中:

代码语言:javascript
运行
复制
- (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之后

代码语言:javascript
运行
复制
...
[self.mypolygroups addObject:theLastPolygroup];

for (PolyGonGroupClass *pgc in mypolygroups) 
{
    for (MKPolygon *p in pgc.polygons) 
    {
        [mapView addOverlay:p];
    }
}

最后,要在组已经在地图上之后更新组的颜色和alpha,您可以这样做:

代码语言:javascript
运行
复制
//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;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6423487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档