自定义标注(mapBox iOS sdk)

时间:2014-01-26 14:39:43

标签: ios objective-c mapbox

我想使用自定义视图创建标注 - 例如此enter image description here

但是我找不到任何解决方法来做这些事情,只有我发现的解决方案是使用以下代码:

- (RMMapLayer *)mapView:(RMMapView *)mapView layerForAnnotation:(RMAnnotation *)annotation

         ... 
        marker = [[RMMarker alloc] initWithUIImage:[UIImage imageNamed:@"marker.png"]]; 
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
        CalloutViewController* callout = [storyboard instantiateViewControllerWithIdentifier:@"callout"]; 
        [marker setLabel:callout.view];
}

但结果不是我想要的,因为当我设置标记的label属性时,视图会显示而不会点击标记。

知道如何解决这个问题吗?或者可能还有其他方法可以实现这一目标?

编辑:

我也在github找到了这篇文章,但我无法弄清楚如何实现它。

2 个答案:

答案 0 :(得分:2)

查看https://github.com/iNima/mapbox-ios-sdk/blob/91d8614fa4549b25dd8b647d82f270382c279a8c/MapView/Map/RMMapView.m

它告诉你,点击RMMapView类将处理为你显示一个标注,因为标记的图层上设置了canShowCallout == YEStitle != nil

如果您的标记符合此标准,则会获得与MapKit相同的标注:)

设置contentView或left-或right- CalloutView变量来修改该标注视图

- (RMMapLayer *)mapView:(RMMapView *)mapView layerForAnnotation:(RMAnnotation *)annotation

     ... 
    marker = [[RMMarker alloc] initWithUIImage:[UIImage imageNamed:@"marker.png"]]; 
    [marker setCanShowCallout:YES];
    [marker setTitle"Test"];

    //Following only works with iNimas version
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    CalloutViewController* callout = [storyboard instantiateViewControllerWithIdentifier:@"callout"]; 
    [marker setContentView:callout.view];

    return marker ; 
}

答案 1 :(得分:1)

这超出了SDK的范围,因为它是在SMCalloutView依赖项目中完成的。由于两者都是开源的,因此您可以添加此行为,但目前无法实现。

(我写了有问题的SDK)。