Toubleshooting mapkit ytelse

stemmer
8

Jeg plotte over 500 poeng på et kart ved hjelp mapkit. Zooming er litt nervøs i forhold til den opprinnelige google map app. Jeg har oppdaget hva som forårsaker treghet. Jeg legger tilpassede kommentarer slik at jeg kan senere legge til ulike pin farger og knapper for detaljvisninger:

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

Hvis jeg kommentere ut koden ovenfor, alt fungerer fint. Veldig glatt med zoome inn / ut. Bør jeg legge til kommentarer annerledes for å øke ytelsen?

Publisert på 08/02/2010 klokken 02:12
kilden bruker
På andre språk...                            


5 svar

stemmer
6

500 kommentarer er trolig for mange, men ikke så mange at ytelsen lider når du bare ser på noen av dem. Men du bør bruke dequeueing med dine kommentarer for å forbedre ytelsen

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

Også, med 500 pinner, tar rulle animasjonen en lang tid å fullføre. Du bør slå det av med[view setAnimatesDrop:NO]

Svarte 08/02/2010 kl. 05:48
kilden bruker

stemmer
3

Jeg skrev en iPhone app for en klient og vi inkludert en butikk locator for en av sine store merkevarer. Det inkluderer 501 steder, og mens animasjonen kan være litt hakkete når du har zoomet ut for å vise hele USA, er det helt greit zoomet inn på statlig nivå, der bare en håndfull av pinnene er synlige.

Nøklene:

  • Zoome brukeren til sin nåværende plassering før du legger dine kommentarer.
  • Gjenbruk utsikt merknads hjelp dequeueReusableAnnotationViewWithIdentifier:.

For å oppnå det første punktet, må du slå på posisjonsoppdateringer og sette et flagg når du mottar den første. Animere kartet til stedet ved hjelp av en region spenn som er fornuftig for din app, deretter i mapView:regionDidChangeAnimated:, sjekk for å se om du fortsatt trenger å legge til dine kommentarer og at den nåværende posisjonen er oppdatert før du ringer addAnnotation:.

Hvis du ikke kan eller ikke ønsker å zoome inn på brukerens plassering, kan du filtrere kommentarer vises på høyeste nivå, og bare legge til flere kommentarer som brukeren zoomer inn?

Forresten, jeg tror du har en minnelekkasje i koden som postet over. Selv om du ikke ønsker å bruke dequeuing mekanisme, utsikten du kommer tilbake fra mapView:viewForAnnotation:bør autoreleased.

Svarte 10/02/2010 kl. 15:28
kilden bruker

stemmer
2

Jeg tror St3fan er riktig. I teorien kan du bare fortsette å legge kommentarer til kartet og la utsikten håndtaket visning av dem, men realiteten er at det er bedre hvis du holder telle ned litt, 500 på skjermen på en gang ville være altfor mange å se likevel.

Men det er et skritt for å prøve - sørg alle visningene merknads har ugjennomsiktig satt til JA slik:

annView.opaque = YES; 
Svarte 08/02/2010 kl. 04:22
kilden bruker

stemmer
1

Hvis du ikke fjerner merknader ikke er sett av brukeren fra visningen, er det én ting å gjøre ved hjelp av MKMapViewDelegate. Hvis ytelsen er nedverdigende når brukeren zoome ut til landnivå kan det være lurt å presentere aggregert informasjon om zoomnivåer> noen konst verdi, for eksempel i stedet for 30 merknader innen 10 square miles vise én merknad som [30 something].

Svarte 29/03/2010 kl. 14:09
kilden bruker

stemmer
1

Det høres for meg at å legge 500 kartpunkter til en del av et kart størrelsen på iPhone-skjermen gir ingen mening. Det er ingen måte du kan visualisere det, eller til og med høyreklikk merknader.

Kan du ikke se på zoomnivå og midten av kartet og deretter bestemme seg for å bare legge en undergruppe av merknader til kartet?

Jeg tror jeg har sett andre apps gjøre dette også.

Svarte 08/02/2010 kl. 03:29
kilden bruker

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