Как отличить два MKPolyline в viewForOverlay:

Я загружаю несколько 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? Или другой, лучший способ сделать это?


person Nic Hubbard    schedule 17.11.2011    source источник
comment
Попробуйте этот ответ. Речь идет о полигонах, но это должно работать с полилиниями.   -  person    schedule 18.11.2011
comment
Анна, это именно то, что я хотела. Не знал, что у него есть свойство title. Можете ли вы опубликовать это как ответ?   -  person Nic Hubbard    schedule 18.11.2011


Ответы (3)


MKPolyline наследуется от MKShape, у которого есть устанавливаемое свойство titlesubtitle), которое вы можете использовать, чтобы различать их.

В этом ответе есть пример того, как использовать его с MKPolygon объектами.

Если title и subtitle недостаточно для ваших требований, вы можете создать подкласс, как прокомментировал Мунди.

person Community    schedule 17.11.2011

MKPolyLine <забастовка> является подклассом UIView. Таким образом, я бы пошел с тегами. Это также упрощает обращение к строкам, когда они вам нужны (с viewWithTag) может быть подклассом для добавления идентификатора, подобного тегу.

person Mundi    schedule 17.11.2011
comment
Вы думаете о MKPolyLineView. - person Craz; 18.11.2011
comment
Ты прав. Виноват. В таком случае — почему бы не подклассировать MKPolyLine и не добавить собственный идентификатор? - person Mundi; 18.11.2011

я использую 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;
    }

}
person chings228    schedule 09.09.2013