我正在尝试在iOS上使用MapBox
实现自定义标注。当用户按下标记时,我希望一个标注显示UIWebView
,而不是左右附件视图和只有文本的标题。
我已经搜索了SDK文档,无法找到一种简单的方法来访问注释标题的视图,因此我可以将其设置为UIWebView
。
我首先尝试访问注释层,看看是否可以进行更改,例如:
RMAnnotation *annotation = [[RMAnnotation alloc] initWithMapView:mapView coordinate:CLLocationCoordinate2DMake(56.0,-4.0) andTitle:@"test"];
annotation.userInfo = @"test";
RMMapLayer *layer = annotation.layer;
layer.backgroundColor = [UIColor blackColor].CGColor;
但是,当我按下标记时,注释气泡仍然是白色的。
我通过SDK搜索试图了解RMAnnotation
和RMMarker
类之间的关系以及它们如何相互作用,但认为我的理解是有缺陷的,因此我没有得到任何地方。
如果有人能帮我指出正确的方向,将不胜感激!
好了,我想到了一个办法。这是一个小"hack",但它非常适合我的目的,所以我想我将分享。如果你有更好的主意,请评论,并告诉我这是不是一个很好的方法。
我检查了SDK源代码和RMMapView
传递SMCalloutView
对象的标题,副标题和左/右附件视图。当我检查SMCalloutView
代码时,有能力通过将UIView
传递给contentView
来提供自定义标注,但RMMapView
不提供传递此功能。我的修复是合成SMCallout
(_currentCallout
),这样我就可以从我的ViewController访问contentView
,并将contentView设置为UIWebView
。我选择在RMMapViewDelegate
中创建一个名为aboutToDisplayAnnotation
的新委托方法,这为我提供了在callout绘制到屏幕之前交换UIWebView
的机会,但我想更好的方法可能是在RMMapView
中重写selectAnnotation
方法。