MKOverlayView和触摸

我有一个自定义MKOverlayView在我的地图上,我想检测触摸。 但是,我似乎无法得到覆盖回应。 我希望这是愚蠢的东西,因为忘记设置userInteractionEnabled为YES …但唉,没有运气那里

….目前,这里是我如何拥有它:

//map delegate overlay: - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay { if (_radiusView !=nil) { [_radiusView removeFromSuperview]; [_radiusView release]; _radiusView = nil; } _radiusView = [[CustomRadiusView alloc]initWithCircle:overlay]; _radiusView.userInteractionEnabled = YES; _radiusView.strokeColor = [UIColor blueColor]; _radiusView.fillColor = [UIColor grayColor]; _radiusView.lineWidth = 1.0; _radiusView.alpha = 0; //fade in radius view [UIView beginAnimations:@"fadeInRadius" context:nil]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:0.6]; _radiusView.alpha = .3; [UIView commitAnimations]; return _radiusView; } 

我的自定义覆盖类只是实现touchesBegan,并扩展MKCircleView

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"touch!"); } 

首先,添加一个手势识别器到你的MKMapView(注意:这是假设ARC):

 [myMapView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(mapTapped:)]]; 

在识别器动作中,您可以通过类似以下内容来确定点击点是否处于视图中:

 - (void)mapTapped:(UITapGestureRecognizer *)recognizer { MKMapView *mapView = (MKMapView *)recognizer.view; id<MKOverlay> tappedOverlay = nil; for (id<MKOverlay> overlay in mapView.overlays) { MKOverlayView *view = [mapView viewForOverlay:overlay]; if (view) { // Get view frame rect in the mapView's coordinate system CGRect viewFrameInMapView = [view.superview convertRect:view.frame toView:mapView]; // Get touch point in the mapView's coordinate system CGPoint point = [recognizer locationInView:mapView]; // Check if the touch is within the view bounds if (CGRectContainsPoint(viewFrameInMapView, point)) { tappedOverlay = overlay; break; } } } NSLog(@"Tapped view: %@", [mapView viewForOverlay:tappedOverlay]); }