Toubleshooting MapKit प्रदर्शन

वोट
8

मैं MapKit का उपयोग कर एक नक्शे पर 500 से अधिक स्थानों की प्लॉटिंग कर रहा हूँ। ज़ूम देशी गूगल मानचित्र अनुप्रयोग की तुलना में एक छोटे से चिड़चिड़ा है। मैं क्या सुस्ती खड़ी कर रहा है की खोज की है। मैं कस्टम एनोटेशन जोड़ रहा है, ताकि मैं बाद में विस्तार से विचारों के लिए अलग अलग रंग और पिन बटन जोड़ सकते हैं:

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

अगर मैं ऊपर कोड बाहर टिप्पणी, सब कुछ ठीक काम करता है। में / ज़ूम आउट कर के साथ बहुत चिकनी। मैं प्रदर्शन को बढ़ावा देने के लिए एनोटेशन जोड़ने की जानी चाहिए अलग ढंग से?

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 अनुप्रयोग लिखा है और हम उनकी दुकान ब्रांडों में से एक के लिए स्टोर लोकेटर शामिल थे। यह 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। प्रदर्शन देश स्तर पर जब उपयोगकर्ता ज़ूम-आउट अपमानजनक है, तो आप जैसे 10 वर्ग मील के दायरे में के बजाय 30 एनोटेशन एकल एनोटेशन की तरह दिखाने के ज़ूम स्तर से संबंधित समग्र जानकारी> कुछ स्थिरांक मूल्य, पेश करने के लिए चाहते हो सकता है [30 something]

29/03/2010 को 15:09
का स्रोत उपयोगकर्ता

वोट
1

यह मेरे लिए लग रहा है कि एक नक्शे के iPhone स्क्रीन के आकार का एक वर्ग के लिए 500 नक्शा अंक जोड़ने कोई मतलब नहीं है। कोई रास्ता नहीं है आपको लगता है कि कल्पना कर सकते हैं या यहां तक ​​कि सही व्याख्या पर क्लिक नहीं है।

आप ज़ूम स्तर और नक्शे के केंद्र में देखो नहीं कर सकते और उसके बाद ही नक्शे के लिए एनोटेशन के एक सबसेट जोड़ने का निर्णय लेते?

मुझे लगता है कि मैंने देखा है अन्य एप्लिकेशन भी ऐसा करते हैं।

08/02/2010 को 04:29
का स्रोत उपयोगकर्ता

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