MKMapView regionDidChangeAnimated не всегда называется!

Это расстраивает меня!!!

Он будет называться большую часть времени, но затем перестанет отвечать на пинча. Он будет вызываться на экране вращением и двойным нажатием. Не для того, чтобы ущипнуть!

Help!

Ответы

Ответ 1

Я работал над некоторым кодом, который имел ту же проблему, и выяснилось, что проблема заключалась в том, что subview с UIGestureRecognizer был добавлен в качестве подзаголовка в MKMapView, а иногда они вызывали бы некоторые методы делегата, чтобы не срабатывать.

Поэтому убедитесь, что вы не добавляете subviews или что-либо в MKMapView.

Надеюсь, что это поможет.

Ответ 2

Я перемещал карту в код, а затем мне казалось, что мне нужно позвонить

[mapView setNeedsDisplay];

После

Ответ 3

Я думаю, что эта проблема может иметь какое-то отношение к многопоточности.

У меня была такая же проблема сегодня утром. Я использую распознаватель жестов для захвата длинного события прессования, а затем добавляю булавку к карте. Если работает хорошо, но после нескольких раундов, регион действительно изменил метод остановки вызова.

Я попробовал несколько решений здесь, но никто не работает. Затем я вспомнил еще одну проблему, с которой я столкнулся, с многопоточным характером действий. Поэтому я пытаюсь переместить код, который управляет mapview при длительном нажатии на блок, который выполняется в основном потоке. И проблема решена.

Ответ 4

Мне удалось решить эту проблему, отключив распознаватель жестов в пределах touchhesBeganCallback

self.tapInterceptor.touchesBeganCallback = ^(NSSet *touches, UIEvent *event) {
    self.tapInterceptor.enabled = NO;
    // do something
};

и повторное включение его в методе domainDidChangeAnimated delegate

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
    self.tapInterceptor.enabled = YES;
    // do something
}

Ответ 5

Всякий раз, когда распознающий знак жесты добавляется в карту, установка

recognizer.cancelsTouchesInView = NO;

заботится о проблеме, если ваша бизнес-логика допускает двойную обработку, если касается касания на карте (с помощью MKMapView И распознавателя жестов который в последнее время мешал региону [Will, Did] ChangeAnimated:)