我正在尝试在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
类之间的关系以及它们如何相互作用,但认为我的理解是有缺陷的,因此我无处可去。
如果有人能帮助我指出正确的方向,那将是值得赞赏的!
答案 0 :(得分:0)
好的,我找到了一种方法来完成这项工作。这有点像'黑客',但它对我的目的非常有效,所以我想我会分享。如果你有更好的想法请评论,并告诉我这是不是一个很好的方法。
我检查了SDK源代码,RMMapView
将SMCalloutView
对象传递给标题,副标题和左/右附件视图。当我检查SMCalloutView
代码时,可以通过将UIView
传递给contentView
来提供自定义标注,但RMMapView
不提供传递此功能。我的修复是合成SMCallout
(_currentCallout
),以便我可以从ViewController访问contentView
并将contentView设置为UIWebView
。我选择在名为RMMapViewDelegate
的{{1}}中创建一个新的委托方法,这样我就可以在将标注绘制到屏幕之前交换我的aboutToDisplayAnnotation
,但我想这是一个更好的方法可能是在UIWebView
中重写selectAnnotation
方法。