Почему этот код не рисует полилинию в MKMapView - PullRequest
0 голосов
/ 09 мая 2018

У меня есть следующий код, с помощью которого я пытаюсь нарисовать ломаную линию между набором координат (которые являются правильными, поскольку я также использую их для добавления булавок на карту, и они работают нормально).

Я вызываю метод рисования, чтобы инициировать рисование следующим образом (массив в вызове метода содержит необходимые координаты):

 [self drawRoute:[[transportData objectForKey:@"19"] objectForKey:@"stops"]];

Это фактический метод, который должен рисовать линию на карте (selectedRoute является объектом MKPolyline):

- (void)drawRoute:(NSArray *)routePointsArray {
if (selectedRoute) {
    [mapView removeOverlay:selectedRoute];
    selectedRoute = nil;
}

CLLocationCoordinate2D routeCoordinates[routePointsArray.count];
for (int i = 0; i < routePointsArray.count; i++) {
    float latitude = [[[routePointsArray objectAtIndex:i] objectForKey:@"lat"] floatValue];
    float longitude = [[[routePointsArray objectAtIndex:i] objectForKey:@"lon"] floatValue];
    CLLocationCoordinate2D routePoint =  CLLocationCoordinate2DMake(latitude, longitude);
    routeCoordinates[i] = routePoint;
}

selectedRoute = [MKPolyline polylineWithCoordinates:routeCoordinates count:routePointsArray.count];
[mapView addOverlay:selectedRoute];
[mapView setVisibleMapRect:[selectedRoute boundingMapRect]];
}

А это мой делегат:

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
MKPolylineRenderer *routeLineView = [[MKPolylineRenderer alloc] initWithPolyline:selectedRoute];

if(overlay == selectedRoute)
{
    if(nil == routeLineView)
    {
        routeLineView = [[MKPolylineRenderer alloc] initWithPolyline:selectedRoute];
        routeLineView.fillColor = [UIColor redColor];
        routeLineView.strokeColor = [UIColor redColor];
        routeLineView.lineWidth = 5;

    }

    return routeLineView;
}

return nil;
}

Я как бы сузил его до того, что массив routeCoordinates не заполняется координатами, но я не понимаю, почему.

Кроме того, если вы обнаружите какие-либо ошибки в коде, я был бы очень признателен, если бы вы могли указать мне на них (возможно, с помощью решения), так как я только изучаю эту часть iOS и могу использовать любую помощь, которую смогу получить.

1 Ответ

0 голосов
/ 09 мая 2018

У вас ошибка в вашем rendererForOverlay методе.

Первое, что он делает, это назначает экземпляр MKPolylineRenderer на routeLineView, но позже вы фактически добавляете оверлей, только если routeLineView равно nil, чего не будет.

Удалить строку, которая присваивает начальное значение routeLineView.

...