近期在寫一個(gè)關(guān)于共享汽車的項(xiàng)目,其主要功能依賴于地圖進(jìn)行展示,在集成高德SDK時(shí)遇上了一些坑,作為記錄和分享.
場景:
在處理Marker點(diǎn)擊事件時(shí),此時(shí)地圖上有Marker點(diǎn)A及Marker點(diǎn)B,當(dāng)選中Marker點(diǎn)A后,SDK方法
"didSelectAnnotationView"響應(yīng)了點(diǎn)擊事件,并進(jìn)行了對應(yīng)的邏輯處理(我在此進(jìn)行了彈窗操作).
當(dāng)關(guān)閉彈窗想再次選中Marker點(diǎn)A,此時(shí)"didSelectAnnotationView"不再響應(yīng).需選中Maker點(diǎn)B
后方法才會再次響應(yīng).也就是說當(dāng)連續(xù)選中同一個(gè)Marker點(diǎn)時(shí)會導(dǎo)致"didSelectAnnotationView"
出現(xiàn)不響應(yīng)的情況.
方案:
針對上述問題,可在創(chuàng)建Annotationview時(shí)給這個(gè)Annotationview添加Tap手勢
自己對事件進(jìn)行處理不依賴SDK提供的方法.
(如有更為便捷有效的方法,歡迎留言建議)
核心代碼
/**
* @brief 根據(jù)anntation生成對應(yīng)的View(設(shè)置標(biāo)準(zhǔn)樣式)
* @param mapView 地圖View
* @param annotation 指定的標(biāo)注
* @return 生成的標(biāo)注View
*/
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id)annotation
{
if ([annotation isKindOfClass:[MAPointAnnotation class]])
{
static NSString *pointDefaultIndentifier = @"pointDefaultIndentifier";
AnnotationViewManager *annotationView = (AnnotationViewManager *)[mapView dequeueReusableAnnotationViewWithIdentifier:pointDefaultIndentifier];
if (annotationView == nil)
{
annotationView = [[AnnotationViewManager alloc] initWithAnnotation:annotation reuseIdentifier:pointDefaultIndentifier];
// 給Marker點(diǎn)添加手勢
[annotationView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onMarkerClick:)]];
}
annotationView.centerOffset = CGPointMake(0, -18);
annotationView.image = [UIImage imageNamed:@"map_tubiao_zuche_icon"];
return annotationView;
}
return nil;
}
// Marker選中事件
- (void)onMarkerClick:(UITapGestureRecognizer *)gesture
{
// 這里做你想的事情
MAAnnotationView *annoView = (MAAnnotationView*)gesture.view;
NSLog(@"選中了: %@",annoView.annotation.title);
// 解決5.0.0上Annotation選中后重用的bug.
if(annoView.annotation == self.mapView.selectedAnnotations.firstObject)
{
if(annoView.selected == NO)
{
[annoView setSelected:YES animated:YES];
}
return;
}
else
{
[self.mapView selectAnnotation:annoView.annotation animated:YES];
}
}
參考:
高德官方Demo GitHub
安利: 在集成高德SDK時(shí)若如遇上問題,解決無果可以直接和官方技術(shù)客服聯(lián)系,大多數(shù)問題都能得到解決.