Toubleshooting mapkit performansı

oy
8

Ben mapkit kullanarak bir harita üzerinde 500'den fazla puan projem var. Yakınlaştırma yerli google harita uygulamasına kıyasla biraz gergin olduğunu. Ben yavaşlık neyin neden olduğunu keşfettim. Daha sonra detay görünümleri için farklı pim renk ve düğmeler ekleyebilirsiniz böylece özel açıklamaları ekliyorum:

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

Yukarıdaki kod dışında bir açıklama, her şey iyi çalışır. In / out yakınlaştırma ile çok düzgün. Ben performansını artırmak için farklı ek açıklamalar ekleyerek mıdır?

Oluştur 08/02/2010 saat 03:12
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
6

500 ek açıklamalar sadece bazıları görüntülerken performansı uğrar muhtemelen çok fazla, ama o kadar çok değil. Ancak, performansı artırmak için ek açıklamalarla dequeueing kullanıyor olmalıdır

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

Ayrıca, 500 iğnelerle açılan animasyon tamamlanması uzun zaman alır. Sen o kapatmalısın[view setAnimatesDrop:NO]

Cevap 08/02/2010 saat 06:48
kaynak kullanıcı

oy
3

Bir müşteri için bir iPhone uygulaması yazmış ve biz onların mağaza markalarından biri için bir mağaza bulma dahil. Bu 501 konumlarını içerir ve animasyon tamamını ABD'yi görmek için uzaklaştırdınız biraz sarsıntılı olabilir iken, o mükemmel iyi pimleri sadece bir avuç görünür devlet düzeyinde, giriş yakınlaştırılmış.

Anahtarlar:

  • Ek açıklamalarınızı eklemeden önce mevcut konuma kullanıcıyı büyüt.
  • Kullanarak açıklama görünümleri yeniden kullanın dequeueReusableAnnotationViewWithIdentifier:.

İlk noktayı ulaşmak için, konum güncellemeleri açın ve ilkini aldığınızda bir bayrak ayarlamanız gerekir. Uygulamanız için mantıklı bir bölge aralığını kullanarak, bu konuma haritayı canlandırın, daha sonra mapView:regionDidChangeAnimated:, hala ek açıklamalar eklemeniz gerekir olmadığını kontrol ve aramadan önce Geçerli konum güncellendiğini addAnnotation:.

Eğer veya kullanıcının konumu yakınlaştırmak istemiyorum olamaz, en yüksek seviyede gösterilen ek açıklamaları filtre ve yakınlaştırdığında olarak sadece ek açıklamaları eklemek?

Bu arada, yukarıda ilan edilen kodunuzda bir bellek sızıntısı olduğuna inanıyorum. Eğer Dequeuing mekanizmasını kullanmak istemiyorsanız bile, dönmek görünümü mapView:viewForAnnotation:autoreleased edilmelidir.

Cevap 10/02/2010 saat 16:28
kaynak kullanıcı

oy
2

Ben St3fan doğru olduğunu düşünüyorum. Teorik olarak sadece haritaya ek açıklamalar eklemeye devam ve bunların görünümü kolu görüntüsünü izin, ama gerçek bir kerede zaten görmeye yol çok olurdu, ekranda 500 biraz geri sayım devam edersek, daha iyi olmasıdır olabilir.

Ancak bir adım daha denemek için var - YES olarak opak kümesine sahip açıklama görüşlerin hepsi emin olun gibi pek:

annView.opaque = YES; 
Cevap 08/02/2010 saat 05:22
kaynak kullanıcı

oy
1

Görünümden kullanıcı tarafından görülmeyen ek açıklamaları kaldırmıyorsa, o yoluyla yapılacak bir şeydir MKMapViewDelegate. Performans ülke seviyesine kullanıcı yakınlaştırma-out düşürüyorsa 10 mil kare içinde yerine 30 ek açıklamaları tek ek açıklama gibi göstermek mesela sen zum düzeyleri ilgili toplu bilgi> Bazı const değerini sunmak isteyebilirsiniz [30 something].

Cevap 29/03/2010 saat 15:09
kaynak kullanıcı

oy
1

Bu bir haritada iPhone ekranının boyutu bir bölümüne 500 harita noktalarını ekleyerek hiçbir mantıklı bana geliyor. Bunu görselleştirmek ve hatta sağ notu üzerine tıklayabilirsiniz hiçbir yolu yoktur.

Haritanın yakınlaştırma düzeyinde ve merkeze bakmak ve sonra yalnızca haritaya ek açıklamaların bir alt kümesini eklemeye karar değil mi?

Ben diğer uygulamalar da bunu gördüm.

Cevap 08/02/2010 saat 04:29
kaynak kullanıcı

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