如何在viewForOverlay中区分两个MKPolyline:

时间:2011-11-17 20:28:14

标签: iphone ios mkmapview polyline mkoverlay

我将多个MKPolylines overlays加载到MKMapView。我希望能够区分这些如何改变颜色,线宽等等。

但是,当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吗?或者,另一种更好的方法呢?

3 个答案:

答案 0 :(得分:8)

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

This answer有一个如何将其与title个对象一起使用的示例。

如果subtitle和{{1}}不足以满足您的要求,那么您可以将子类命名为Mundi。

答案 1 :(得分:0)

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

答案 2 :(得分: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;
    }

}