为什么此代码不在MKMapView上绘制折线

时间:2018-05-08 21:10:57

标签: ios objective-c mkmapview mkpolyline

我有以下代码,我试图在一组坐标之间绘制折线(这是正确的,因为我也使用它们将图钉添加到地图,这些工作正常)。

我调用绘图方法来启动绘图(方法调用中的数组包含必要的坐标):

 [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 :(得分:0)

您的rendererForOverlay方法出错。

它做的第一件事是将MKPolylineRenderer的实例分配给routeLineView,但稍后只有在routeLineViewnil时才会实际添加叠加层,它赢了“是的。

删除将初始值分配给routeLineView的行。