我将多个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
吗?或者,另一种更好的方法呢?
答案 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;
}
}