web-dev-qa-db-ja.com

iOS 7マップでのルートの表示:addOverlayは効果がありません

mapView内にポイントツーポイントルートを表示したいので、次のコードを使用してルートを作成します。

- (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

ルートは正しいのですが、なぜ地図に表示されないのかわかりません!

助言がありますか?

18
Max_Power89

研究の1日の後、私はこの3つのステップで解決しました:

  1. デリゲートを設定します(_self.mapView.delegate = self_)。
  2. MKMapViewDelegateをインポートします
  3. 新しいiOS7MapViewデリゲートメソッドを実装します:- (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;
}
_

このメソッドは、マップにポリラインを追加すると、デリゲートによって自動的に呼び出されます。

50
Max_Power89