首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >点击一个MKAnnotationView去选择它并隐藏它的标注

点击一个MKAnnotationView去选择它并隐藏它的标注
EN

Stack Overflow用户
提问于 2012-11-12 23:45:58
回答 1查看 2.7K关注 0票数 5

我有一个带有自定义注释的iOS应用程序。

  1. 我希望能够点击一次MKAnnotationView来显示它的标注(工作正常)
  2. 然后,我想再次点击MKAnnotationView,取消选择注释并隐藏该注释的标注(在iOS5中工作,而不是iOS6)。

据我所知,didSelectAnnotationView只在初始选择注释时被调用。(1:Selecting a MapView Annotation Twice ),根据本文和我读过的其他文章(2:ios mapkit closing annotation callouts by tapping the map),在选择需要UITapGestureRecognizer之后,似乎可以检测到MKAnnotationView上的任何附加点击。

因此,我使用的是一个UITapGestureRecognizer,当注释视图已经被选中时,我正确地检测到了它们上的附加点击,并且当我识别了tap并分别隐藏/取消选择标注/注释时,我调用了deselectAnnotation。它在iOS5中很好,但在iOS6中只有一半。

在iOS6中,会调用tap手势识别器,我调用代码来隐藏标注并取消选择注释,然后selectAnnotationView方法就会被调用,所以我的标注再次出现,我的注释再次被选中。

我假设发生的是,在我取消选择我的点击手势识别器中的注释视图之后,点击事件仍然是活动的,mapView检测到触摸事件并调用selectAnnotationView,所以我刚刚取消选择的注释现在又被选中了。

我不知道为什么它只发生在iOS6中,但是我希望能为处理我想要的行为提供任何其他的想法。

EN

回答 1

Stack Overflow用户

发布于 2013-09-05 09:44:37

我不知道你是否还有问题(我希望没有,因为你的职位有点老了)。但是,如果有些人遇到同样的问题,取消注释并避免重新选择mapKit的一种解决方案是在取消注释之前添加一点延迟。

代码语言:javascript
复制
- (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];
}

如果用户取消选择地图上的注释,点击donMt伪造以删除此代码中的手势

代码语言:javascript
复制
- (void) mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view {
         for (UIGestureRecognizer *recognizer in view.gestureRecognizers) {
             [view removeGestureRecognizer:recognizer];
         }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13353505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档