Toubleshooting απόδοση mapkit

ψήφοι
8

Είμαι σχεδιάζοντας πάνω από 500 σημεία σε χάρτη με τη χρήση mapkit. Ζουμ είναι λίγο νευρικός σε σχέση με την εγγενή εφαρμογή google map. Έχω ανακαλύψει τι προκαλεί την βραδύτητα. Είμαι προσθέτοντας προσαρμοσμένες σχολιασμούς, έτσι ώστε αργότερα να προσθέσετε διάφορα χρώματα καρφίτσα και τα κουμπιά για τις απόψεις λεπτομέρεια:

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

Αν έχω σχολιάσει το παραπάνω κώδικα, όλα λειτουργούν σωστά. Πολύ καλή με ζουμ in / out. Θα έπρεπε να κάνω προσθέτοντας σχολιασμούς με διαφορετικό τρόπο για να ενισχύσει τις επιδόσεις;

Δημοσιεύθηκε 08/02/2010 στις 03:12
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
6

500 σχόλια είναι πιθανώς πάρα πολλά, αλλά όχι τόσα πολλά ώστε η απόδοση υποφέρει όταν προβάλλετε μόνο μερικά από αυτά. Ωστόσο, θα πρέπει να χρησιμοποιείτε dequeueing με σχολιασμούς σας για να βελτιώσετε τις επιδόσεις

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

Επίσης, με 500 καρφίτσες, η κινούμενη εικόνα πτώση παίρνει πολύ χρόνο για να ολοκληρωθεί. Θα πρέπει να την απενεργοποιήσετε με[view setAnimatesDrop:NO]

Απαντήθηκε 08/02/2010 στις 06:48
πηγή χρήστη

ψήφοι
3

Έγραψα ένα iPhone app για έναν πελάτη και περιελάμβανε ένα κατάστημα εντοπισμού για μία από τις μάρκες κατάστημά τους. Περιλαμβάνει 501 θέσεις και ενώ η κίνηση μπορεί να είναι σπασμωδικές λίγο, όταν σμικρύνει για να δείτε όλες τις ΗΠΑ, είναι απολύτως εντάξει μεγέθυνση στο κρατικό επίπεδο, όπου μόνο μια χούφτα καρφίτσες είναι ορατά.

Τα κλειδιά:

  • Ζουμ τον χρήστη στην τρέχουσα θέση τους, πριν να προσθέσετε σχόλια σας.
  • Επαναχρησιμοποίηση θέα σχολιασμό χρήση dequeueReusableAnnotationViewWithIdentifier:.

Για να επιτευχθεί το πρώτο σημείο, θα πρέπει να ενεργοποιήσετε ενημερώσεις τοποθεσίας και να ορίσετε μια σημαία όταν λάβετε την πρώτη. Κίνηση του χάρτη για αυτή τη θέση χρησιμοποιώντας ένα χρονικό περιοχή που έχει νόημα για την εφαρμογή σας, στη συνέχεια, mapView:regionDidChangeAnimated:ελέγξτε για να δείτε αν θα πρέπει ακόμα να προσθέσετε σχόλια σας και ότι η σημερινή θέση έχει ενημερωθεί πριν να τον καλέσετε addAnnotation:.

Αν δεν μπορείτε ή δεν θέλετε να μεγεθύνετε την τοποθεσία του χρήστη, μπορείτε να φιλτράρετε τα σχόλια που εμφανίζονται στο υψηλότερο επίπεδο και μόνο προσθέσετε επιπλέον σχολιασμούς καθώς ο χρήστης μεγεθύνει;

Με την ευκαιρία, πιστεύω ότι έχετε μια διαρροή μνήμης στον κώδικα σας, όπως δημοσιεύτηκε παραπάνω. Ακόμα και αν δεν θέλετε να χρησιμοποιήσετε το μηχανισμό dequeuing, η θέα θα επιστρέψει από το mapView:viewForAnnotation:να autoreleased.

Απαντήθηκε 10/02/2010 στις 16:28
πηγή χρήστη

ψήφοι
2

Νομίζω ότι St3fan είναι σωστή. Θεωρητικά μπορείτε απλά να συνεχίσουμε να προσθέτουμε σχολιασμούς στο χάρτη και αφήστε την οθόνη άποψη λαβή από αυτά, αλλά η πραγματικότητα είναι ότι είναι καλύτερα να κρατήσει το μετρήσει κάτω από ένα κομμάτι, 500 στην οθόνη με τη μία θα είναι πάρα πολλές για να δείτε έτσι κι αλλιώς.

Ωστόσο, υπάρχει ένα ακόμα βήμα για να δοκιμάσετε - βεβαιωθείτε ότι όλες οι απόψεις σχολιασμού έχουν αδιαφανή οριστεί σε Ναι, όπως αυτό:

annView.opaque = YES; 
Απαντήθηκε 08/02/2010 στις 05:22
πηγή χρήστη

ψήφοι
1

Εάν δεν αφαιρέσετε τα σχόλια δεν έχουμε δει από το χρήστη από την άποψη, αυτό είναι ένα πράγμα που πρέπει να κάνετε με τη βοήθεια του MKMapViewDelegate. Αν η απόδοση είναι εξευτελιστική όταν ο χρήστης zoom-out σε επίπεδο χώρας μπορεί να θέλετε να παρουσιάσει συγκεντρωτικά πληροφορίες σχετικά με τα επίπεδα ζουμ> κάποια const αξίας, π.χ. αντί για 30 σχόλια μέσα σε 10 τετραγωνικά μίλια δείχνουν μόνο σχολιασμό όπως [30 something].

Απαντήθηκε 29/03/2010 στις 15:09
πηγή χρήστη

ψήφοι
1

Ακούγεται για μένα ότι η προσθήκη 500 σημεία του χάρτη σε ένα τμήμα του χάρτη το μέγεθος της οθόνης του iPhone δεν έχει κανένα νόημα. Δεν υπάρχει κανένας τρόπος που μπορείτε να απεικονίσει αυτό ή ακόμα και κάντε δεξί σχολιασμό.

Δεν μπορείτε να δείτε το επίπεδο ζουμ και το κέντρο του χάρτη και στη συνέχεια να αποφασίσει να προσθέσει μόνο ένα υποσύνολο των σχολιασμών στο χάρτη;

Νομίζω ότι έχω δει σε άλλες εφαρμογές να το κάνετε αυτό πάρα πολύ.

Απαντήθηκε 08/02/2010 στις 04:29
πηγή χρήστη

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