2012-03-22 9 views
17

क्या एक गतिशील टेक्स्ट लेबल द्वारा एनोटेशन के पिन आइकन को प्रतिस्थापित करना संभव है?एनोटेशन में टेक्स्ट लेबल द्वारा आइकन पिन बदलें?

शायद सीएसएस का उपयोग कर, या गतिशील रूप से एक छवि बना रहा है?

उदाहरण के लिए जावास्क्रिप्ट के साथ Google मानचित्र API पर सीएसएस के साथ एक लेबल किया जाता है।

+0

हैलो, थोड़ा और विस्तार करने का प्रयास करें। आपने जो कुछ किया है उसका कुछ कोड हो सकता है। –

उत्तर

30

हां, यह संभव है।

आईओएस मैपकिट में, आपको viewForAnnotation प्रतिनिधि विधि को लागू करने की आवश्यकता होगी और के साथ MKAnnotationView को वापस करने की आवश्यकता होगी।

उदाहरण के लिए:

-(MKAnnotationView *)mapView:(MKMapView *)mapView 
    viewForAnnotation:(id<MKAnnotation>)annotation 
{ 
    if ([annotation isKindOfClass:[MKUserLocation class]]) 
     return nil; 

    static NSString *reuseId = @"reuseid"; 
    MKAnnotationView *av = [mapView dequeueReusableAnnotationViewWithIdentifier:reuseId]; 
    if (av == nil) 
    { 
     av = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId] autorelease]; 

     UILabel *lbl = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 30)] autorelease]; 
     lbl.backgroundColor = [UIColor blackColor]; 
     lbl.textColor = [UIColor whiteColor]; 
     lbl.alpha = 0.5; 
     lbl.tag = 42; 
     [av addSubview:lbl]; 

     //Following lets the callout still work if you tap on the label... 
     av.canShowCallout = YES; 
     av.frame = lbl.frame; 
    } 
    else 
    { 
     av.annotation = annotation; 
    } 

    UILabel *lbl = (UILabel *)[av viewWithTag:42]; 
    lbl.text = annotation.title;   

    return av; 
} 

सुनिश्चित करें मानचित्र दृश्य के delegate संपत्ति अन्यथा इस प्रतिनिधि विधि कहा जाता है नहीं किया जाएगा सेट किया गया है और आप डिफ़ॉल्ट लाल पिन के बजाय मिल जाएगा।

+0

तेज प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। मैं जल्द ही इस कोड का परीक्षण करूंगा। जल्द ही फिर मिलेंगे। – joumerlin

+0

ठीक काम कर रहा है, thx ... – joumerlin

2

ऊपर Anna की टिप्पणी में उल्लिखित प्रतिनिधि विधि का एक स्विफ्ट 3 भिन्नता है। सुनिश्चित करें कि आपकी कक्षा MKMapViewDelegate के अनुरूप है और मैप व्यू का प्रतिनिधि स्वयं को डीडलोड() में सेट कर रहा है।

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { 
    if annotation is MKUserLocation { 
     return nil 
    } 

    let reuseId = "reuseid" 
    var av = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) 
    if av == nil { 
     av = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 
     let lbl = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 30)) 
     lbl.backgroundColor = .black 
     lbl.textColor = .white 
     lbl.alpha = 0.5 
     lbl.tag = 42 
     av?.addSubview(lbl) 
     av?.canShowCallout = true 
     av?.frame = lbl.frame 
    } 
    else { 
     av?.annotation = annotation 
    } 

    let lbl = av?.viewWithTag(42) as! UILabel 
    lbl.text = annotation.title! 

    return av 
} 
संबंधित मुद्दे