display route on iOS 7 maps: addOverlay has no effect

匿名 (未验证) 提交于 2019-12-03 01:10:02

问题:

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?

回答1:

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)overlay:

this is my implementation:

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id)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.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!