Search code examples
iosios7mapboxgoogle-directions-api

MapBox. layerForAnnotation not being called. Drawing shape


I am trying to draw a path for the user from point A to point B with given coordinates.

LayerForAnnotation isn't being called after I add the annotation. I am new to using MapBox SDK and don't really know what I'm doing wrong. I looked for instructions on adding Shapes on the MapBox documentation. I tried changing to RMPointAnnotation but did not work and isn't supposed to according to this: Issue GitHub RMAnnotation.

I have checked if there is any info about the implementation of this delegate but haven't found a lot on the MapBox documentation page. I downloaded the example project that illustrates annotations from here: Weekend Picks sample.

This is the code I am using:

 - (void) makeRoutingAnnotations
{
    // Translate updated path with new coordinates.
    NSInteger numberOfSteps = _path.count;

    NSMutableArray *coordinates = [[NSMutableArray alloc] init];
    for (NSInteger index = 0; index < numberOfSteps; ++index) {
        CLLocation *location = [_path objectAtIndex:index];
        [coordinates addObject:location];
    }
    RMAnnotation *startAnnotation = [[RMAnnotation alloc] initWithMapView:mapView coordinate:((CLLocation *)[coordinates objectAtIndex:0]).coordinate andTitle:@"Start"];

    startAnnotation.userInfo = coordinates;
    [startAnnotation setBoundingBoxFromLocations:coordinates];

    [mapView addAnnotation:startAnnotation];

}

   - (RMMapLayer *)mapView:(RMMapView *)mView layerForAnnotation:(RMAnnotation *)annotation
{
    if (annotation.isUserLocationAnnotation)
        return nil;

    RMShape *shape = [[RMShape alloc] initWithView:mView];

    // set line color and width
    shape.lineColor = [UIColor colorWithRed:0.224 green:0.671 blue:0.780 alpha:1.000];
    shape.lineWidth = 8.0;

    for (CLLocation *location in (NSArray *)annotation.userInfo)
        [shape addLineToCoordinate:location.coordinate];

    return shape;

}

What could I be missing? I made a droppoint on the layerForAnnotation method but it isn't being called.


Solution

  • I found the problem I hadn't properly implemented the RMMapViewDelegate. Since it wasn't properly implemented it wasn't called.

    Suffices to add it on the header file and assign it in code.

    mapView.delegate = self;