我有一个带有自定义注释的iOS应用。
据我所知,只有在初始选择注释时才会调用didSelectAnnotationView。 ([1]:Selecting a MapView Annotation Twice ),基于这篇文章以及我读过的其他文章([2]:ios mapkit closing annotation callouts by tapping the map),看起来在选择MKAnnotationView后需要UITapGestureRecognizer检测任何额外的点击。
所以,我正在使用UITapGestureRecognizer,并且当我已经选择了我的注释视图时,我正在检测其他点击,并且当我识别出水龙头时,我正在调用deselectAnnotation。 ; m分别隐藏/取消选择标注/注释。它在iOS5中运行良好,但它只有一半适用于iOS6
在iOS6中,调用了轻击手势识别器,我调用我的代码来隐藏标注并取消选择注释,一切都很好,但是然后以某种方式调用selectAnnotationView方法,因此我的标注再次出现并且我的注释再次被选中。
我假设发生的事情是,在我的点击手势识别器中取消选择注释视图后,点击事件仍处于活动状态,mapView检测到触摸事件并调用selectAnnotationView,因此注释现在再次选择我 取消选择。
我不知道为什么它只发生在iOS6中,但我希望能够输入任何其他想法来处理我想要的行为。
答案 0 :(得分:0)
我不知道你是否还有问题(我希望你的帖子有点旧)。 但是,如果有些人遇到同样的问题,取消选择注释并避免mapKit重新选择它的解决方案是在取消选择注释之前添加一点延迟。
- (void)annotationTap:(UIGestureRecognizer *)gesture
{
MKAnnotationView *mkav = (MKAnnotationView *)gesture.view;
//Add a small delay to deselect
[self performSelector:@selector(deselectAnnotation:) withObject:mkav.annotation afterDelay:0.3];
[gesture.view removeGestureRecognizer:gesture];
}
- (void)deselectAnnotation:(id<MKAnnotation>)annotation
{
[self.mapView deselectAnnotation:annotation animated:YES];
}
如果用户在地图上取消选择注释,请点击“使用此代码删除手势”,然后使用此代码删除手势
- (void) mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view {
for (UIGestureRecognizer *recognizer in view.gestureRecognizers) {
[view removeGestureRecognizer:recognizer];
}
}