gpt4 book ai didi

ios - 点击 MKAnnotationView 取消选择它并隐藏它的标注

转载 作者:可可西里 更新时间:2023-11-01 04:59:48 26 4
gpt4 key购买 nike

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

  1. 我希望能够点击 MKAnnotationView 一次以显示它的标注(工作正常)
  2. 然后我想再次点击 MKAnnotationView 以取消选择注释并隐藏该注释的标注(适用于 iOS5 但不适用于 iOS6)。

我知道 didSelectAnnotationView 只应该在初始选择注释时被调用。 ([1]:Selecting a MapView Annotation Twice),并且根据这篇文章和我读过的其他文章([2]:ios mapkit closing annotation callouts by tapping the map),看起来在 MKAnnotationView 被选中后检测任何额外的点击需要 UITapGestureRecognizer。

所以,我使用的是 UITapGestureRecognizer,当我的注释 View 已经被选中时,我正确地检测到额外的点击,当我识别出点击并隐藏/取消选择时,我调用了 deselectAnnotation标注/注释分别。在 iOS5 上很好用,在 iOS6 上就只有一半了

在 iOS6 中,点击手势识别器被调用,我调用我的代码来隐藏标注并取消选择注释,一切都很好,但随后 selectAnnotationView 方法以某种方式被调用,所以我的标注再次出现,我的注释得到再次选择。

我假设发生的是,在我取消选择我的点击手势识别器中的注释 View 后,点击事件仍然处于事件状态,mapView 检测到触摸事件并调用 selectAnnotationView,因此注释我刚刚取消选择的那个现在又被选中了。

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

最佳答案

我不知道您是否还有问题(我希望没有,因为您的帖子有点旧)。但如果有人遇到同样的问题,取消选择注释并避免 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];
}

如果用户取消选择 map 上的注释,请点击 donMt forge 以使用此代码删除手势

- (void) mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view {
for (UIGestureRecognizer *recognizer in view.gestureRecognizers) {
[view removeGestureRecognizer:recognizer];
}
}

关于ios - 点击 MKAnnotationView 取消选择它并隐藏它的标注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com