Toubleshooting MapKit Leistung

stimmen
8

Ich Plotten über 500 Punkte auf einer Karte mithilfe MapKit. Zooming ist ein wenig nervös im Vergleich zur nativen google map app. Ich habe entdeckt, was die Langsamkeit verursacht. Ich bin das Hinzufügen von benutzerdefinierten Anmerkungen, so dass ich später verschiedene Stiftfarben und Knöpfe für Detailansichten hinzufügen:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(AddressNote *) annotation {
    MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@currentlocation];
    annView.pinColor = MKPinAnnotationColorGreen;
    annView.animatesDrop=TRUE;
    annView.canShowCallout = YES;
    annView.calloutOffset = CGPointMake(-5, 5);
    return annView;
}

Wenn ich den obigen Code auf Kommentar, funktioniert alles einwandfrei. Sehr glatt in / out mit Zoomen. Soll ich Anmerkungen anders werden, indem die Leistung zu steigern?

Veröffentlicht am 08/02/2010 um 03:12
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
6

500 Anmerkungen sind wahrscheinlich zu viele, aber nicht so viele, dass die Leistung leidet, wenn Sie nur einige von ihnen sehen. Sie sollten jedoch Warteschlangenauflösungs mit Ihren Anmerkungen werden mit Leistung zu verbessern

- (MKAnnotationView *)mapView:(MKMapView *)mapView
            viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKPinAnnotationView *view = nil;
    if (annotation != mapView.userLocation) {
        view = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"identifier"];
        if (nil == view) {
            view = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"identifier"] autorelease];
        }
        [view setPinColor:MKPinAnnotationColorGreen];
        [view setCanShowCallout:YES];
        [view setAnimatesDrop:NO];
    }
    else {
        // Do something with the user location view
    }
    return view;
}

Auch mit 500 Pins, nimmt die Drop-Animation eine lange Zeit zu beenden. Sie sollten diese Funktion deaktivieren, mit[view setAnimatesDrop:NO]

Beantwortet am 08/02/2010 um 06:48
quelle vom benutzer

stimmen
3

Ich schrieb eine iPhone App für einen Kunden und wir einen Store Locator für einen ihrer Eigenmarken enthalten. Es umfasst 501 Standorte und während der Animation ein bisschen abgehackt sein kann, wenn Sie die gesamten Vereinigten Staaten zu sehen sind herausgezoomt, ist es völlig in Ordnung, in die Landesebene gezoomt, wo nur eine Handvoll Stift sichtbar ist.

Die Schlüssel:

  • Zoom die Benutzer in ihrem aktuellen Speicherort, bevor Sie Ihre Anmerkungen hinzufügen.
  • Reuse Beschriftungsansichten verwenden dequeueReusableAnnotationViewWithIdentifier:.

Um den ersten Punkt zu erreichen, müssen Sie vor Ort Updates aktivieren und einen Flag setzen , wenn Sie die ersten erhalten. Animieren Sie die Karte an dieser Stelle eine Region Spanne verwenden , die sinnvoll für Ihre App macht, dann mapView:regionDidChangeAnimated:, um zu sehen , wenn Sie noch Ihre Anmerkungen hinzufügen müssen und dass die aktuelle Lage wurde aktualisiert , bevor Sie anrufen addAnnotation:.

Wenn Sie nicht auf den Standort des Benutzers zu vergrößern, können Sie die Anmerkungen filtern können oder wollen nicht auf höchstem Niveau gezeigt und nur zusätzliche Anmerkungen hinzufügen, wenn der Benutzer in zoomt?

By the way, ich glaube , Sie ein Speicherleck im Code wie oben geschrieben. Selbst wenn Sie den Ausreihen Mechanismus nicht verwenden möchten, die Aussicht , die man von Rückkehr mapView:viewForAnnotation:sollte Autoreleased werden.

Beantwortet am 10/02/2010 um 16:28
quelle vom benutzer

stimmen
2

Ich denke, St3fan korrekt ist. In der Theorie halten Sie können nur Anmerkungen zu der Karte hinzugefügt und die Ansicht Griff Anzeige von ihnen lassen, aber die Realität ist, dass es besser ist, wenn Sie das halten ein wenig heruntergezählt, 500 auf dem Bildschirm würde sofort sein viel zu viele ohnehin zu sehen.

Allerdings gibt es einen weiteren Schritt, um zu versuchen - stellen Sie sicher, alle die Beschriftungsansichten haben undurchsichtige Satz JA etwa so:

annView.opaque = YES; 
Beantwortet am 08/02/2010 um 05:22
quelle vom benutzer

stimmen
1

Wenn Sie nicht Anmerkungen zu entfernen sind nicht vom Benutzer aus Sicht gesehen, das ist eine Sache , mit Hilfe zu tun MKMapViewDelegate. Wenn die Leistung ist , wenn Nutzer - Zoom-out auf Länderebene zu verschlechtern können Sie aggregierte Informationen über Zoomstufen präsentieren wollen> etwas const Wert, zB anstelle von 30 Anmerkungen innerhalb von 10 Quadrat - Meilen wie einzelne Anmerkung zeigen [30 something].

Beantwortet am 29/03/2010 um 15:09
quelle vom benutzer

stimmen
1

Es klingt für mich, dass zu einem Abschnitt einer Karte der Größe des iPhone-Bildschirm 500 Punkte auf der Karte hinzugefügt macht keinen Sinn. Es gibt keine Möglichkeit, dass oder sogar klicken Sie auf der rechten Anmerkung visualisieren.

Können nicht sehen Sie auf der Zoomstufe und in der Mitte der Karte und dann entscheiden, nur eine Teilmenge von Anmerkungen zu einer Karte hinzufügen?

Ich glaube, ich habe andere Anwendungen dies auch tun gesehen.

Beantwortet am 08/02/2010 um 04:29
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more