2010-11-07 3 views
12

Это меня разочаровывает!MKMapView regionDidChangeAnimated не всегда называется!

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

Помощь!

+1

Я когда-нибудь получал решение этой проблемы ? – thekevinscott

+0

Обсуждаются некоторые из этих вопросов на форумах Apple: https://devforums.apple.com/message/525411 –

+0

Если вы используете пользовательский аннотационный просмотр, который выполняет собственную обработку касаний, ознакомьтесь с этим обсуждением: http: // www.iphonedevsdk.com/forum/iphone-sdk-development/79199-regiondidchangeanimated-not-always-firing.html –

ответ

7

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

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

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

3

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

[mapView setNeedsDisplay]; 

После!

+0

На самом деле все еще не происходит! –

1

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

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

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

0

мне удалось решить эту проблему, отключив жест распознаватель в 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 
} 
0

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

recognizer.cancelsTouchesInView = NO; 

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

Смежные вопросы