MKPolyline отображается только при перемещении карты - PullRequest
0 голосов
/ 07 января 2012

У меня есть MKMapView с некоторыми выводами.Я соединяю контакты с видом MKPolyline.Но MKPolyline отображается только при перемещении карты (когда обновляется MapView?).Я хочу видеть MKPolyline с самого начала.

Пожалуйста, проверьте следующий код:

-(void)plotSnapPosition {
    for (id<MKAnnotation> annotation in myMapView.annotations) {
        [myMapView removeAnnotation:annotation];
    }
    for (id<MKOverlay> overlay in myMapView.overlays) {
        [myMapView removeOverlay:overlay];
    }
    NSArray *snaps = self.entry.snapsArray;
    CLLocationCoordinate2D *locations = malloc(sizeof(CLLocationCoordinate2D) * snaps.count);
    NSInteger counter = 0;
    for (Snap *snap in snaps) {
        locations[counter] = [snap coordinates];
        CLLocationCoordinate2D c = [snap coordinates];
        CAHAnnotation *annotation = [[CAHAnnotation alloc] initWithDate:snap.timeAsString coordinate:c counter:counter];
        [myMapView addAnnotation:annotation];
        counter++;
    }
    MKPolyline *polyline = [MKPolyline polylineWithCoordinates:locations count:snaps.count];
    MKPolylineView *routeLineView = [[MKPolylineView alloc] initWithPolyline:polyline];
    routeLineView.fillColor = [UIColor redColor];
    routeLineView.strokeColor = [UIColor redColor];
    routeLineView.lineWidth = 5;

    [myMapView setVisibleMapRect:polyline.boundingMapRect];
    [self.myMapView addOverlay:polyline];
}

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay {
    if ([overlay isKindOfClass:[MKPolyline class]]) {
        MKPolylineView *routeLineView = [[MKPolylineView alloc] initWithPolyline:overlay];
        routeLineView.fillColor = [UIColor blueColor];
        routeLineView.strokeColor = [UIColor blueColor];
        routeLineView.lineWidth = 3;
        return routeLineView;
    }

    return nil;
}

Для проблем тестирования я установил цвет MKPolyline в методе -(void)plotSnapPosition на красный.В делегате я установил синий цвет.После перемещения карты отображается только синий.

Может ли кто-нибудь помочь мне в этом?Я думаю, что это только маленькая ошибка.Спасибо.

вот скриншоты:

два пина

после перемещения карты:

theПуть после перемещения карты

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Убедитесь, что вы установили делегат mapView до добавления оверлея. Итак, в вашем случае

mapView.delegate = self;
[self plotSnapPosition];
0 голосов
/ 07 января 2012

Вы пытались добавить вызов [overlayView setNeedsDisplay] после завершения рисования?

...