2010-11-07 8 views
12

¡Esto me frustra!MKMapView regionDidChangeAnimated ¡no siempre llamado!

Se llamará la mayor parte del tiempo, pero luego dejará de responder a los pellizcos. Se llamará a una pantalla rotada y un doble toque. ¡No es una pizca!

¡Ayuda!

+1

¿Alguna vez encontró una solución a esto? ? – thekevinscott

+0

Hay una discusión sobre esto en los foros de Apple: https://devforums.apple.com/message/525411 –

+0

Si está usando una vista de anotación personalizada que hace su propio manejo táctil, entonces vea esta discusión: http: // www.iphonedevsdk.com/forum/iphone-sdk-development/79199-regiondidchangeanimated-not-always-firing.html –

Respuesta

7

Estaba trabajando en un código que tenía el mismo problema y resulta que el problema era que se había agregado una subvista con UIGestureRecognizer como una subvista al MKMapView, y en ocasiones, algunos métodos de delegado no se activaban.

Así que asegúrese de no agregar subvistas ni nada al MKMapView.

Espero que esto ayude.

3

que se movía en el mapa de código y entonces parece que necesitaba para llamar

[mapView setNeedsDisplay]; 

Después!

+0

¡Realmente todavía no está sucediendo! –

1

Creo que este problema puede tener algo que ver con multi-threading.

Tuve el mismo problema esta mañana. Utilizo un reconocedor de gestos para capturar eventos de pulsación larga y luego agregar un marcador a la vista de mapa. Si funciona bien, pero después de algunas rondas, la región cambió el método de detención.

He intentado algunas soluciones aquí pero ninguna funciona. Luego recordé algún otro problema que tuve antes con la naturaleza de las acciones de múltiples hilos. Así que trato de mover el código que controla la vista de mapa en una acción de pulsación larga a un bloque que se ejecuta en el hilo principal. Y el problema está resuelto.

0

me las arreglé para resolver este problema deshabilitando el reconocedor gesto dentro de la touchesBeganCallback

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

y reenabling que en el método delegado regionDidChangeAnimated

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

Cada vez que un reconocedor del grifo gesto añade a la MapView, configuración

recognizer.cancelsTouchesInView = NO; 

se ocupa de o f el problema si la lógica de su empresa permite el doble procesamiento si toca en mapview (por MKMapView Y el reconocedor de gestos que más recientemente interfirió con la región [Will, Did] ChangeAnimated :)

Cuestiones relacionadas