Toubleshooting výkon mapkit

hlasů
8

Jsem vykreslování více než 500 bodů na mapě pomocí mapkit. Zoomování je trochu nervózní v porovnání s nativní aplikaci Mapy Google. Zjistil jsem, co je příčinou pomalost. Já přidávání vlastních poznámek, takže mohu později přidat různé pin barvy a tlačítka pro zobrazení detailů:

- (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;
}

Kdybych komentář mimo výše uvedený kód, vše funguje. Velmi hladký s zoom in / out. Měl bych být přidávání poznámek rozdílně ke zvýšení výkonnosti?

Položena 08/02/2010 v 03:12
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
6

500 anotace je pravděpodobně příliš mnoho, ale ne tolik, aby výkon trpí, když si prohlížíte jen některé z nich. Nicméně, měli byste používat dequeueing se svými poznámkami ke zlepšení výkonnosti

- (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;
}

Také s 500 piny, pokles animace trvá dlouhou dobu na dokončení. Měli byste vypni to s[view setAnimatesDrop:NO]

Odpovězeno 08/02/2010 v 06:48
zdroj uživatelem

hlasů
3

Napsal jsem aplikaci pro iPhone pro klienta a jsme zařadili vyhledávač obchodů na jednom ze svých obchodů značek. To zahrnuje 501 míst a zároveň animace může být trochu trhané, když jste oddálení pro zobrazení celé Spojené státy, je to naprosto v pořádku přiblížení na státní úrovni, kde jsou viditelné jen hrstka kolíků.

Klíče:

  • Přiblížení uživatele do jejich aktuálního umístění, než můžete přidat poznámky.
  • Opakované použití pohledy poznámek pomocí dequeueReusableAnnotationViewWithIdentifier:.

K dosažení první bod, je třeba zapnout odesílání informací o poloze a nastavit příznak, když dostanete první. Animovat mapy na daném místě s použitím oblast rozpětí, které má smysl pro vaši aplikaci, pak mapView:regionDidChangeAnimated:zkontrolujte, zda jste ještě potřeba přidat poznámky a aby byla aktuální poloha byla aktualizována před volání addAnnotation:.

Pokud nemůžete nebo nechcete přiblížit k poloze uživatele, můžete filtrovat poznámky zobrazené na nejvyšší úrovni a jen přidat další poznámky, protože uživatel přiblíží?

Mimochodem, myslím, že máte nevracení paměti v kódu jako posta výše. Dokonce i když nechcete používat mechanismus dequeuing, pohled návratu z mapView:viewForAnnotation:měla být autoreleased.

Odpovězeno 10/02/2010 v 16:28
zdroj uživatelem

hlasů
2

Myslím, že St3fan je správná. Teoreticky můžete jen držet přidávání poznámek do mapy a nechte displej pohled rukojeti z nich, ale realita je taková, že je lepší, když si udržet počítat trochu dolů, 500 na obrazovce najednou by bylo příliš mnoho vidět stejně.

Je zde však ještě jeden krok, aby se pokusila - zkontrolujte, zda všechny pohledy poznámek mají neprůhlednou nastavena na YES jako tak:

annView.opaque = YES; 
Odpovězeno 08/02/2010 v 05:22
zdroj uživatelem

hlasů
1

Pokud nejste odstraňování anotace neviděli uživatelem z pohledu, to je jedna věc udělat pomocí MKMapViewDelegate. Pokud výkon je ponižující, když uživatel vzdalovat úrovni jednotlivých zemí, možná budete chtít, aby předložila souhrnné informace o měřítkáchcích> nějakou const hodnotu, například místo 30 anotace během 10 čtverečných mil ukáže jedinou anotaci jako [30 something].

Odpovězeno 29/03/2010 v 15:09
zdroj uživatelem

hlasů
1

Připadá mi, že přidáním 500 mapových bodů úseku mapy o velikosti obrazovky iPhone nemá smysl. Neexistuje žádný způsob, jak můžete představit, že ani Klikněte pravým anotaci.

Nelze se podíváte na úroveň zvětšení a uprostřed mapy a pak se rozhodnout pro přidání pouze podmnožinu anotací na mapě?

Myslím, že jsem viděl další aplikace to udělat taky.

Odpovězeno 08/02/2010 v 04:29
zdroj uživatelem

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