当收到这个需求的时候,我可以很苦恼的,因为百度地图没有给相关demo,网上搜了一些解决方案,但是我觉得也不尽完善,最终还是回到了百度提供的代码去研究,无意中发现了一个很好的解决方案;
其实百度还是提供了自定义汽泡的方法,只是官方的demo里面没有展现出来;
下面上代码;
- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView*)view;
相信很多人都知道这个方法,我用到这个方法的时候是为了给弹出的汽泡添加点击事件;
使用
NSArray* subviews = [[view superview]subviews];
BMKActionPaopaoView* paopao;
for (UIView* subview in subviews) {
if([subview isKindOfClass:[BMKActionPaopaoView class]])
{
paopao = (BMKActionPaopaoView*)subview;
break;
}
}
这些代码可以找到汽泡那个view,仔细研究百度提供的源代码不难发现它的类型是BMKActionPaopaoView;
这样子获取到了汽泡,再添加点击方法就是水到渠成的事;
===========================================
如上内容为发现思路,可以不看,重点在下面;
下面说关键怎么自定义汽泡
- (BMKAnnotationView*)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation
在这个方法里面添加一两行代码就能实现;
BMKActionPaopaoView* actionPaopaoView = [[BMKActionPaopaoView alloc] initWithCustomView:customeView];
newAnnotationView.paopaoView = actionPaopaoView;
这个customeView可以是任意UIView或UIView的子类;
到此为止自定义弹出汽泡的需求就完成了,如果想对弹出的汽泡的一些button添加点击方法;
本人亲测直接添加addTarget这个方法貌似不管用,如果有朋友测试成功的话可以交流;
关于添加点击事件的方法在另外一篇文章