MKMapView regionDidChangeAnimated не всегда вызывается! - PullRequest
12 голосов
/ 07 ноября 2010

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

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

Помогите!

Ответы [ 5 ]

7 голосов
/ 13 мая 2011

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

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

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

3 голосов
/ 07 ноября 2010

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

[mapView setNeedsDisplay];

После того, как!

1 голос
/ 07 февраля 2012

Я думаю, что эта проблема может быть связана с многопоточностью.

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

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

0 голосов
/ 01 февраля 2018

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

recognizer.cancelsTouchesInView = NO;

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

0 голосов
/ 21 июля 2012

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

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

и повторно включив его в методе делегата regionDidChangeAnimated

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
    self.tapInterceptor.enabled = YES;
    // do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...