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):

  • Zoom MKMapView to fit polyline points
  • Xcode: build and run for both iOS Simulator and Device in one step?
  • Understanding this use of “(Private)” in @interface declaration
  • Where should I be setting autolayout constraints when creating views programmatically
  • iOS distinguish between which callout accessory is tapped
  • Xcode warning when using MapKit and CoreLocation
  • - (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.