UIPanGestureRecognizer on MKMapView?

I would like to add some logic when user moves with map view i. e. he does a pan touch. But when I add the gesture recognizer and I want to log the touch, nothing happens. When I try it in another view controller and add the recognizer to controller’s view then it works ok.

Here’s my code (map view is a property of application delegate because I need to do some other things with it even if it isn’t visible):

  • Make UIGestureRecognizer to receive touches started on subviews
  • UIGestureRecognizer receive touch but forward it to UIControl as well
  • Expanding and collapsing tableView sections iOS?
  • How to add touch gesture to map but ignore touches on pins and annotations?
  • Snapchat-like text on image
  • How can I define the custom UIGestureRecognizer in Swift?
  • - (void)viewDidLoad
    {
        ...
        UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(showPan)];
        [appDelegate.mapView addGestureRecognizer:panGesture];
        [panGesture release];
    }
    
    - (void)showPan
    {
        NSLog(@"pan!");
    }
    

    I use latest iOS 4.2.1

    Thanks for any advice.

    Solutions Collect From Internet About “UIPanGestureRecognizer on MKMapView?”

    Ok, because no one knew, I had to spent one Apple technical support consult for it. ;o)

    Because MKMapView evidently has its own recognizers to interact with user, you have to adhere to the UIGestureRecognizerDelegate protocol and implement (BOOL)gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: like this:

    - (void)viewDidLoad
    {
        ...
        UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(showPan)];
        panGesture.delegate = self;
        [appDelegate.mapView addGestureRecognizer:panGesture];
        [panGesture release];
    }
    
    - (void)showPan
    {
        NSLog(@"pan!");
    }
    
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {   
        return YES;
    }
    

    Then it works like a charm.