• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

MapView etwas zu träge

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Hallo zusammen,
Ich zeige auf einer MapViev ca. 7500 Annotations an. Alles klappt ganz gut, bis auf die Sache mit der Performance. Ich habe es bisher nur im Simulator getestet. wenn ich eine Zoomstufe wähle in der alle Annotations sichtbar sind scrollt die Karte etwas zäh. Ok , das sind auch 7500 Pins aber die lade ich alle schon im viewDidload auf die Karte. Das heißt für mich das wenn er einmal alles geladen hat dann nicht mehr ruckeln müsste. Sind die Annotations nicht Bild scrollt die karte flüssig. Nur jedes Mal wenn die 7500 Pins in den sichtbereich kommen geht das Ruckeln los. Wie kann ich das Problem lösen?

HintergrundGrund-Infos:
Die MapView wird übers Hauptmenü aufgrufen mit der methode prepareForSegue. Innherhalb dieser Methode hole ich die daten vom Server, was dann natürlich auch 3-4 Sekunden dauert. Innerhalb des ViewControllers der dann die MapView beinhaltet ruckelt das scrollen auf der Karte.Obwohl ich nur in der viewDidLoad-Methode ein paar Zeilen Code habe. Ich lese zwar ein komplettes Dictionary aus, aber das kann mit dem ruckeln ja nix zu tun haben.

Hier mal den Code aus dem MapViewViewConrtroller
Code:
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    CLLocationCoordinate2D location;
    
    for (NSDictionary *singlePoint in points)
    {
        location.latitude = [[[singlePoint objectForKey:@"point"] objectForKey:@"lat"] doubleValue];
        location.longitude = [[[singlePoint objectForKey:@"point"] objectForKey:@"long"] doubleValue];
        
        MapViewAnnotation *newAnnotation =[[MapViewAnnotation alloc] initWithTitle:@"Test" andCoordinate:location];
        
        [self.mapView addAnnotation:newAnnotation];
    }
}
 
Einmal sieht es für mich bei deinem Code so aus, als ob du direkt für jede Annotation einen AnnotationView erstellst, oder steht der Name MapViewAnnotation für etwas anderes? Hab schon eine Weile nicht mehr mit MKMapView gearbeitet und bin mir daher auch nicht sicher ob das überhaupt möglich ist.
Falls das jedenfalls wirklich ein View für die Annotation ist solltest du lieber nur die Annotation hinzufügen und dann MKMapViewDelegate implementieren und erst in mapView:viewForAnnotation: den View erstellen.
Beim erstellen des Views für die Annotation solltest du außerdem dequeueReusableAnnotationViewWithIdentifier: benutzen.


Du könntest außerdem noch versuchen mapView:regionDidChangeAnimated: zu implementieren und dadrin dann einige Annotations auf hidden setzen, so dass nicht mehr ganz so viele wirklich sichtbar sind.
Hier wird das noch bisschen ausführlicher erklärt: http://stackoverflow.com/questions/4776341/handling-large-quantity-of-mkmapview-annotations
 
Danke für die Info.
Ich habe mittlerweile ein sehr gutes Tutorial gefunden, in dem genau diese Methode gewinnbringend angewendet werden soll und die Delegate-Methode hab ich dann 1:1 übernommen (bis auf selbstdefinierte Bezeichner natürlich). Nur geholfen hat es leider nix, wenn ich alle 7500 Anmerkungen auf einen Schlag sehe, ruckelt es. Ich hab das Tutorial noch nicht zu ende gemacht, vielleicht ruckelt das da auch am Ende?? Aber wer weiß wie viele Annotations ich da habe?? Oder erzähle ich quatsch und es ruckelt nie wenn ich alles ganz sauber programmiere?? oder ist irgendwann mal das Maß erreicht wenn es zu viele Annotations sind und ein ruckeln kann nicht vermieden werden??
Fragen über Fragen?
Was ist eure Meinung dazu?