2013-10-24 20 views
6

Abbiamo visto un comportamento imprevisto in una delle nostre app: una schermata mostra annotazioni su una visualizzazione mappa e l'utente può modificare le annotazioni visualizzate facendo clic su pulsante.MKMapView - setRegion: animato rende MKMapView non risponde su iOS7

Quando ricostruiamo l'app con iOS7 lo schermo si blocca regolarmente, cioè non è più possibile l'input dell'utente su MKMapView dopo che il codice sottostante è stato chiamato più volte (con diversi set di annotazioni) - la vista è incorporata in entrambi una barra delle linguette e un controller nav e tutti i loro elementi dell'interfaccia utente funzionavano ancora, ma la mapview stessa non accettava alcun input dell'utente (pizzicamento/zoom).

Il codice che mostra le annotazioni è qui:


[self.mapView removeAnnotations:self.mapView.annotations]; 

for (MyObject *my in self.mydata) 
{ 
    MyAnnotation *annotation = [MyAnnotationFactory createAnnotationFor:my]; 
    [self.mapView addAnnotation:annotation]; 
} 

CLLocationCoordinate2D mycenter; 
mycenter.latitude = -38.967659; 
mycenter.longitude = 172.873534; 

[self.mapView setRegion:MKCoordinateRegionMake(mycenter, MKCoordinateSpanMake(15, 18)) 
       animated:YES]; 

[self.mapView setCenterCoordinate:mycenter]; 

Quello che ho trovato è che modificando la regione senza la anima, cioè modificando il codice sopra per

 
[self.mapView setRegion:MKCoordinateRegionMake(mycenter, MKCoordinateSpanMake(15, 18)) 
       animated:NO]; 

la il problema scompare e MKMapView si comporta bene anche su iOS7.

Se avete un'idea di perché questo sta accadendo, e perché sta accadendo solo in iOS7 e non per le versioni precedenti, apprezzerei il chiarimento.

+0

Ho riscontrato lo stesso identico problema. Purtroppo non ho ancora trovato una soluzione. – Jonathan

+0

Stai facendo causa al threading? – latenitecoder

risposta

-1

Provare a eseguire il setregion in una funzione dal thread principale:

[self performSelectorOnMainThread:@selector(animateMapRegion) withObject:nil waitUntilDone:NO]; 

-(void)animateMapRegion 
{ 
    CLLocationCoordinate2D mycenter; 
    mycenter.latitude = -38.967659; 
    mycenter.longitude = 172.873534; 
    [self.mapView setRegion:MKCoordinateRegionMake(mycenter, MKCoordinateSpanMake(15, 18)) animated:animated]; 

} 
0

Inoltre, rivedere la vostra MapView: regionDidChangeAnimated: e MapView: regionWillChangeAnimated: metodi. Implementare solo uno potrebbe funzionare per te; uno di quelli potrebbe non essere necessario per l'implementazione.