我的应用程序中有一个MapView。 Showuserlocation处于活动状态。 我添加了GestureRecognizer进行长按。 一切正常。
通过利弊,当我触摸用户的注释(蓝色圆圈)时,手势事件不会被接收。
如何拦截用户注释上的手势?
谢谢你的帮助。
答案 0 :(得分:2)
您可以通过修改上述代码中的微小更改来添加手势以检测长按。
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
UILongPressGestureRecognizer* _longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressDetected:)];
_longPressRecognizer.minimumPressDuration = 0.0;
_longPressRecognizer.accessibilityValue = [NSString stringWithFormat:@"%d",totalMenues];
[pinView addGestureRecognizer:_longPressRecognizer];
}
- (void) longPressDetected:(UIGestureRecognizer*) gestureRecognizer
{
}
答案 1 :(得分:1)
您没有在注释上添加手势。因此您需要为每个注释添加手势。由于有两种方法,因此无需向注释添加手势。
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
如果你想那么
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation)annotation
{
// Reuse or create annotation view
UILongPressGestureRecognizer *longTap = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longTapRecgonized:)];
longTap.delegate = self;
[annotationView addGestureRecognizer:longTap];
}
- (void)longTapRecognized:(UITapGestureRecognizer *)recognizer
{
// Handle double tap on annotation view
}
答案 2 :(得分:0)
您是否实施了UIGestureRecognizerDelegate
的后续方法?
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
该方法应该返回YES,因此手势识别器可以与其他人一起使用。