当前位置: 动力学知识库 > 问答 > 编程问答 >

mapkit - display route on iOS 7 maps: addOverlay has no effect

问题描述:

i want display a point to point route inside my mapView, i use this code for create the route:

- (IBAction)backToYourCar {

MKPlacemark *sourcePlacemark = [[MKPlacemark alloc] initWithCoordinate:self.annotationForCar.coordinate addressDictionary:nil];

NSLog(@"coordiante : locationIniziale %f", sourcePlacemark.coordinate.latitude);

MKMapItem *carPosition = [[MKMapItem alloc] initWithPlacemark:sourcePlacemark];

MKMapItem *actualPosition = [MKMapItem mapItemForCurrentLocation];

NSLog(@"coordiante : source %f, ActualPosition %f", carPosition.placemark.coordinate.latitude ,actualPosition.placemark.coordinate.latitude);

MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];

request.source = actualPosition;

request.destination = carPosition;

request.requestsAlternateRoutes = YES;

MKDirections *directions = [[MKDirections alloc] initWithRequest:request];

[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {

if (error) {

NSLog(@"Error : %@", error);

}

else {

[self showDirections:response]; //response is provided by the CompletionHandler

}

}];

}

and this for show the route on the map:

- (void)showDirections:(MKDirectionsResponse *)response

{

for (MKRoute *route in response.routes) {

[self.mapView addOverlay:route.polyline level:MKOverlayLevelAboveRoads];

}

}

actually this code does nothing.

if i try to print the the distance of route i get the correct value:

route distance: 1910.000000

then the route is right, but i can't understand why it doesn't appear on the map!

Any suggestions?

网友答案:

after a day of research i have solved with this 3 steps:

  1. Set the delegate (self.mapView.delegate = self).
  2. import the MKMapViewDelegate
  3. Implemente the new iOS7 MapView delegate method: - (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay(id<MKOverlay>)overlay:

this is my implementation:

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
    if ([overlay isKindOfClass:[MKPolyline class]]) {
        MKPolyline *route = overlay;
        MKPolylineRenderer *routeRenderer = [[MKPolylineRenderer alloc] initWithPolyline:route];
        routeRenderer.strokeColor = [UIColor blueColor];
        return routeRenderer;
    }
    else return nil;
}

this method is automatically called by the delegate when you add the polyline on the map.

分享给朋友:
您可能感兴趣的文章:
随机阅读: