2013-10-24 10 views
6

Wir haben ein unerwartetes Verhalten in einer unserer Apps gesehen - auf einem Bildschirm zeigen wir Annotationen in einer Kartenansicht an und der Benutzer kann die angezeigten Annotationen durch Klicken auf a ändern Taste.MKMapView - setRegion: animiert macht MKMapView nicht mehr auf iOS7

Wenn wir die App mit iOS7 neu aufbauen, würde der Bildschirm regelmäßig einfrieren, dh nach mehrmaligem Aufruf des unten stehenden Codes (mit unterschiedlichen Annotationen) war keine weitere Benutzereingabe mehr möglich - die Ansicht ist in beiden eingebettet eine Tab-Leiste und ein Nav-Controller und alle ihre UI-Elemente funktionierten immer noch, aber die Mapview selbst würde keine Benutzereingaben akzeptieren (Kneifen/Zoomen).

Der Code, der die Anmerkungen zeigt hier:


[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]; 

Was ich fand, ist, dass es durch Einstellen der Region ohne Animieren, dh durch den obigen Code zu Ändern

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

die Problem verschwindet und MKMapView verhält sich auch auf iOS7 gut.

Wenn Sie eine Idee zu haben, warum dies passiert, und warum es nur in iOS7 und nicht für frühere Versionen passiert, würde ich die Klarstellung zu schätzen wissen.

+0

Ich habe das exakt gleiche Problem erlebt. Leider habe ich noch keine Lösung gefunden. – Jonathan

+0

Verklagst du überhaupt Threading? – latenitecoder

Antwort

-1

Versuchen Sie, die setRegion in Abhängigkeit von der Haupt-Thread ausgeführt wird:

[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

Auch Ihre mapView Bewertung: regionDidChangeAnimated: und mapView: regionWillChangeAnimated: Methoden. Das Implementieren von nur einem könnte für Sie arbeiten; Eine davon wird möglicherweise nicht benötigt, um sie zu implementieren.