3

我正在将多个MKPolylinesas加载overlaysMKMapView. 我希望能够区分这些如何改变颜色、线宽等。

但是,当viewForOverlay:被调用时,它看到MKPolylines的都是一样的,这不允许我改变它们中的任何一个。

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {

    if ([overlay isKindOfClass:[MKPolyline class]]) {
        MKPolylineView *aView = [[[MKPolylineView alloc] initWithPolyline:(MKPolyline*)overlay] autorelease];
        aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7];
        MKZoomScale currentZoomScale = (CGFloat)(mapView.bounds.size.width / mapView.visibleMapRect.size.width);
        aView.lineWidth = MKRoadWidthAtZoomScale(currentZoomScale);

        return aView;
    }

    // Want to color my next overlay red

    return  nil;
}

我怎样才能做到这一点?我可以以某种方式在每个标签上附加标签MKPolyline吗?或者,另一种更好的方法来做到这一点?

4

3 回答 3

8

MKPolyline继承自MKShapewhich 具有可设置的title(和subtitle)属性,您可以使用它来区分它们。

这个答案有一个如何将它与MKPolygon对象一起使用的示例。

如果title并且subtitle不足以满足您的要求,那么您可以按照 Mundi 的评论进行子类化。

于 2011-11-17T21:12:27.673 回答
0

MKPolyLine 是 的子类UIView。因此我会选择标签。这也使得在需要时引用这些行变得非常容易(使用viewWithTag可以子类化以添加类似标签的标识符。

于 2011-11-17T20:56:39.377 回答
0

我以 mkcircle 为例

  MKCircle *circle = [MKCircle circleWithCenterCoordinate:currentPoint radius:radius];
    [circle setTitle:@"circle1"];
    [map addOverlay:circle];


- (MKOverlayView *)mapView:(MKMapView *)map viewForOverlay:(id <MKOverlay>)overlay
{
    NSLog(@"overlay %@",overlay);

    if ([[overlay title] isEqualToString:@"circle1"]){

    circleView = [[MKCircleView alloc] initWithOverlay:overlay];
    //circleView.strokeColor = [UIColor redColor];
    circleView.fillColor = [[UIColor redColor] colorWithAlphaComponent:0.3];

    return circleView;
    }

}
于 2013-09-09T06:08:17.403 回答