2011-02-02 16 views
21

मैंने एमकेसीरकल को एमकेओवरले के रूप में एमकेओवरले के रूप में जोड़ा है। इसके अलावा मैंने सर्कल के त्रिज्या का फैसला करने के लिए एक यूआईएसलाइडर जोड़ा। दुर्भाग्यवश इसका उपयोग करते समय यह थोड़ा "लगी" लगता है, जैसा कि मैं चाहता हूं उतना आसान नहीं।एमकेओवरले आसानी से आकार बदल नहीं रहा

उदाहरण: http://dl.dropbox.com/u/3077127/mkoverlayDelay.mov

यह मेरा कोड है:

- (void)addCircle 
{ 
    // draw the radius circle for the marker 
    double radius = 2000.0; 
    MKCircle *circle = [MKCircle circleWithCenterCoordinate:location radius:radius]; 
    [circle setTitle:@"background"]; 
    [mapView addOverlay:circle]; 

    MKCircle *circleLine = [MKCircle circleWithCenterCoordinate:location radius:radius]; 
    [circleLine setTitle:@"line"]; 
    [mapView addOverlay:circleLine]; 
} 

- (void)addCircleWithRadius:(double)radius 
{ 
    MKCircle *circle = [MKCircle circleWithCenterCoordinate:location radius:radius]; 
    [circle setTitle:@"background"]; 
    [mapView addOverlay:circle]; 

    MKCircle *circleLine = [MKCircle circleWithCenterCoordinate:location radius:radius]; 
    [circleLine setTitle:@"line"]; 
    [mapView addOverlay:circleLine]; 
} 

- (void)sliderChanged:(UISlider*)sender 
{ 
    [mapView removeOverlays:[mapView overlays]]; 

    double radius = (sender.value * 100); 

    [self addCircleWithRadius:radius]; 
} 

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay{ 
    MKCircle *circle = overlay; 
    MKCircleView *circleView = [[[MKCircleView alloc] initWithCircle:overlay] autorelease]; 

    if ([circle.title isEqualToString:@"background"]) 
    { 
     circleView.fillColor = UIColorFromRGB(0x598DD3); 
     circleView.alpha = 0.25; 
    } 
    else 
    { 
     circleView.strokeColor = UIColorFromRGB(0x5C8AC7); 
     circleView.lineWidth = 2.0; 
    } 

    return circleView; 
} 

किसी को भी मैं यह कैसे smoothen कर सकते हैं पर कोई सुझाव हैं?

सादर,
पॉल Peelen

+1

+1 अच्छी तरह से प्रलेखित प्रश्न के लिए +1। ओवरले को हटाने की कोई ज़रूरत है, क्यों न सिर्फ इसे अपडेट करें? –

+0

धन्यवाद! मुझे नहीं लगता कि कोई ज़रूरत है .. लेकिन मैं ओवरले को कैसे अपडेट कर सकता हूं? –

+0

मुझे यकीन नहीं है कि आप कर सकते हैं? मैंने हमेशा सोचा था कि मैपकिट ओवरले अपरिवर्तनीय थे, आप उन्हें बनाए जाने के बाद संशोधित नहीं कर सकते हैं। यह उत्तर वही सुझाता है: http://stackoverflow.com/questions/3171572/how-to-update-mkpolyline-mkpolylineview – lxt

उत्तर

5

मैं अपने कोड की कोशिश की और यह चिकनी बनाने के लिए एक बहुत ही आसान तरीका मिल गया है।

आप कॉल का क्रम बदलने के हैं: - (void)sliderChanged:(UISlider*)sender

आप [mapView removeOverlays:[mapView overlays]];

कॉल करने से पहले [self addCircleWithRadius:radius];

कॉल कर सकते हैं बस सुनिश्चित करें कि आप न ओवरले आप हाल ही में जोड़े केवल पुराने लोगों को दूर करना ।

यह आपको एक आसान आकार देने देगा, विशेष रूप से जब नया सर्कल पुराने से छोटा होता है।

बड़ी संख्या में सर्किलों के लिए आप NSOperations का उपयोग कर बेहतर तरीके से बंद कर सकते हैं ताकि विचारों को तेज़ी से बनाया जा सके, इससे यह आसान हो जाएगा।

उम्मीद है कि इससे मदद मिलती है।

+0

अच्छा विचार। मै उसे करने की एक कोशिश तो करूंगा। क्या आप NSOperations के साथ अपना सुझाव विस्तृत कर सकते हैं? –

+0

मुझे खुशी है कि आपको बड़ी मंडलियों के संबंध में विचार पसंद है, मैं आपको [ब्रेडक्रंब] (http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html) उदाहरण पर इंगित करूंगा। – Zebs

+2

एक 'एनएसओपरेशन' ट्यूटोरियल की तलाश में आया [यह एक] [http://icodeblog.com/2010/03/04/iphone-coding-turbo-charging-your-apps-with-nsoperation/), यह है बहुत पूर्ण और आपको 'एमकेसीकल' ऑब्जेक्ट्स को तेज़ी से बनाने में मदद करनी चाहिए। बस याद रखें कि आप मुख्य रन लूप से केवल उपयोगकर्ता इंटरफ़ेस को अपडेट कर सकते हैं। – Zebs

0

आपकी सबसे अच्छी शर्त एमके मैप व्यू के शीर्ष पर एक और UIView का उपयोग करके, या मानचित्र दृश्य में एमकेएनोटेशन व्यू का उपयोग करके स्वयं को सर्कल खींचने के लिए हो सकती है।

इस ब्लॉगर ने एक समान काम किया है (आईओएस 4 से पहले जब ओवरले जोड़े गए थे)। http://spitzkoff.com/craig/?p=65

+0

खींचें UiView मानचित्र के साथ स्थानांतरित नहीं होता है। – AlexWien

संबंधित मुद्दे