我有一个带有自定义注释的iOS应用程序。
据我所知,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中,但是我希望能为处理我想要的行为提供任何其他的想法。
发布于 2013-09-05 09:44:37
我不知道你是否还有问题(我希望没有,因为你的职位有点老了)。但是,如果有些人遇到同样的问题,取消注释并避免重新选择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];
}如果用户取消选择地图上的注释,点击donMt伪造以删除此代码中的手势
- (void) mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view {
for (UIGestureRecognizer *recognizer in view.gestureRecognizers) {
[view removeGestureRecognizer:recognizer];
}
}https://stackoverflow.com/questions/13353505
复制相似问题