• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

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?