Подтвердить что ты не робот

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

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

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

Help!

4b9b3361

Ответ 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:)