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;
}
我允许用户点击屏幕上的任意位置,我还允许他们点击注释以显示与注释相关的文本。
为了让他们可以点击屏幕上的任意位置,我设置了一个 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;
}