objective c UITapGestureRecognizer 中的 mkmapview 如何测试他们是否点击了注释

objective c mkmapview in UITapGestureRecognizer how can I test if they tapped on an annotation

我允许用户点击屏幕上的任意位置,我还允许他们点击注释以显示与注释相关的文本。

为了让他们可以点击屏幕上的任意位置,我设置了一个 taggesturerecoginzer。

问题是当他们点击注释时,taggesturerecognizer 事件发生在 didSelectAnnotationView 之前,所以我在不想执行时执行了 taggesturerecognizer。

我可以在 taggesturerecognizer 中以某种方式测试他们是否点击了注释吗?

我遇到了与 LongGesture 相同的问题,您可以使用 UIGestureRecognizerDelegate 来防止调用手势操作。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([touch.view isKindOfClass:[MKPinAnnotationView class]])
    {
        return NO;
    }
    return YES;
}

注意:不要忘记用你的tapGesture设置委托。

解决方案:

在我的 header (.h) 中,我添加了委托:

@interface myVC : UIViewController <UIGestureRecognizerDelegate>

在 .m 中:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
[self.mapView addGestureRecognizer:tap];
tap.delegate = self;

请注意 Nirav 所说的需要添加的委托声明

然后我添加了 Nirav 的代码,但更改了 IF 语句:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
  if (([touch.view isKindOfClass:[MKPinAnnotationView class]]) || ([touch.view isKindOfClass:[MKAnnotationView class]]))
  {
    return NO;
  }
  return YES;
}