Как различить два MKPolyline в viewForOverlay: - PullRequest
3 голосов
/ 18 ноября 2011

Я загружаю несколько 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 ]

8 голосов
/ 18 ноября 2011

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

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

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

0 голосов
/ 09 сентября 2013

В качестве примера я использую 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;
    }

}
0 голосов
/ 18 ноября 2011

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

...