UIPanGestureRecognizer на MKMapView? - PullRequest
       20

UIPanGestureRecognizer на MKMapView?

36 голосов
/ 15 февраля 2011

Я хотел бы добавить некоторую логику, когда пользователь перемещается с видом карты, т.е. он делает касание панорамирования.Но когда я добавляю распознаватель жестов и хочу регистрировать касание, ничего не происходит.Когда я пробую его в другом контроллере представления и добавляю распознаватель к представлению контроллера, он работает нормально.

Вот мой код (представление карты является свойством делегата приложения, потому что мне нужно сделать с ним некоторые другие вещи, даже еслиэто не видно):

- (void)viewDidLoad
{
    ...
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(showPan)];
    [appDelegate.mapView addGestureRecognizer:panGesture];
    [panGesture release];
}

- (void)showPan
{
    NSLog(@"pan!");
}

Я использую последнюю версию iOS 4.2.1

Спасибо за любой совет.

1 Ответ

134 голосов
/ 23 февраля 2011

Хорошо, потому что никто не знал, мне пришлось потратить одну консультацию технической поддержки Apple на это. ; О)

Поскольку MKMapView, очевидно, имеет свои собственные распознаватели для взаимодействия с пользователем, вы должны придерживаться протокола UIGestureRecognizerDelegate и реализовать (BOOL)gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: следующим образом:

- (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;
}

Тогда это работает как шарм.

...