performanță mapkit Toubleshooting

voturi
8

Sunt complot peste 500 de puncte de pe hartă utilizând mapkit. Panoramarea este un pic de nervozitate în comparație cu aplicația nativă harta Google. Am descoperit ceea ce cauzează lentoarea. Adaug adnotări personalizate, astfel încât să pot adăuga mai târziu, diferite culori pini și butoane pentru vederile de detaliu:

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

Dacă am comentați codul de mai sus, totul funcționează bine. Foarte buna cu zoom in / out. Ar trebui să fie adăugarea de adnotări în mod diferit pentru a crește performanța?

Întrebat 08/02/2010 la 03:12
sursa de către utilizator
În alte limbi...                            


5 răspunsuri

voturi
6

500 adnotări este, probabil, prea multe, dar nu atât de multe încât performanța suferă atunci când vizualizați doar unele dintre ele. Cu toate acestea, ar trebui să fie utilizați dequeueing cu adnotări dvs. pentru a îmbunătăți performanța

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

De asemenea, cu 500 de pini, animația picătură ia o lungă perioadă de timp pentru a termina. Ar trebui să o dezactivați cu[view setAnimatesDrop:NO]

Publicat 08/02/2010 la 06:48
sursa de către utilizator

voturi
3

Am scris o aplicație iPhone pentru un client și am inclus un locator magazin pentru unul din brandurile lor magazin. Acesta include 501 locații și în timp ce animația poate fi un pic sacadat atunci când măriți harta pentru a vizualiza întreaga Statele Unite ale Americii, este perfect fin mărită la nivel de stat, în cazul în care doar o mână de pini sunt vizibile.

Cheile:

  • Zoom utilizatorul în locația lor curentă înainte de a adăuga adnotări dumneavoastră.
  • Reutilizare vederi adnotări utilizând dequeueReusableAnnotationViewWithIdentifier:.

Pentru a realiza primul punct, trebuie să activați actualizările de locație și de a seta un steag atunci când primiți primul. Animați harta la acea locație , folosind un interval de regiune care are sens pentru aplicația dvs., apoi mapView:regionDidChangeAnimated:, verificați pentru a vedea dacă trebuie să adăugați adnotări dumneavoastră și că locația curentă a fost actualizat înainte de a suna addAnnotation:.

Dacă nu puteți sau nu doriți să măriți locația utilizatorului, se poate filtra adnotările afișate la cel mai înalt nivel și doar adăugați adnotări suplimentare ca utilizatorul face zoom in?

Apropo, cred că ai o scurgere de memorie în codul dvs. ca postat mai sus. Chiar dacă nu doriți să utilizați mecanismul dequeuing, ecranul vă întoarceți de la mapView:viewForAnnotation:ar trebui să fie autoreleased.

Publicat 10/02/2010 la 16:28
sursa de către utilizator

voturi
2

Cred că St3fan este corect. În teorie, puteți păstra doar adăugând adnotări pe hartă și lăsați afișajul vedere mânerul de ele, dar realitatea este că este mai bine să păstrați conta în jos un pic, de 500 de pe ecran dintr-o dată ar fi mult prea multe pentru a vedea oricum.

Cu toate acestea există încă un pas pentru a încerca - asigurați-vă că toate punctele de vedere de adnotare au stabilit opace la YES astfel:

annView.opaque = YES; 
Publicat 08/02/2010 la 05:22
sursa de către utilizator

voturi
1

Dacă nu eliminați adnotările nu sunt văzute de utilizator de la vedere, că este un lucru de făcut prin intermediul MKMapViewDelegate. Dacă performanța este degradant atunci când utilizatorul zoom-out la nivel de țară poate doriți să prezinte multe informații agregate cu privire la nivelurile de panoramare> o valoare const, de exemplu , în loc de 30 de adnotări în termen de 10 de mile pătrate arată o singură adnotare cum ar fi [30 something].

Publicat 29/03/2010 la 15:09
sursa de către utilizator

voturi
1

Mi se pare că adăugarea de 500 de puncte de hartă la o secțiune a unei hărți de dimensiunea ecranului iPhone-are nici un sens. Nu există nici un fel, puteți vizualiza că sau chiar faceți clic pe adnotarea din dreapta.

Nu poți să uiți la nivelul de zoom și centrul hărții și apoi să decidă pentru a adăuga doar un subset de adnotări pe hartă?

Cred că am văzut alte aplicații fac acest lucru prea.

Publicat 08/02/2010 la 04:29
sursa de către utilizator

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