在iOS 7地图上显示路线:addOverlay没有效果
我想在我的mapView中显示一个点到点的路由,我用这个代码来创build路由:
- (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 } }]; }
这是为了显示在地图上的路线:
- (void)showDirections:(MKDirectionsResponse *)response { for (MKRoute *route in response.routes) { [self.mapView addOverlay:route.polyline level:MKOverlayLevelAboveRoads]; } }
其实这个代码什么都不做。
如果我尝试打印路线的距离,我得到正确的值:
route distance: 1910.000000
那么路线是正确的,但我不明白为什么它不会出现在地图上!
有什么build议么?
经过一天的研究,我已经解决了这3个步骤:
- 设置委托(
self.mapView.delegate = self
)。 - 导入
MKMapViewDelegate
- 实现新的iOS7 MapView委托方法:
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay(id<MKOverlay>)overlay
:
这是我的实现:
- (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; }
当您在地图上添加折线时,代理自动调用此方法。