2012-03-22 15 views
17

Bir ek açıklamanın pin ikonunu dinamik bir metin etiketiyle değiştirmek mümkün müdür? Simge pinini ek açıklamadaki metin etiketiyle değiştirir misiniz?

Belki css kullanarak veya dinamik bir görüntü oluştururken?

Örneğin bir etiket JavaScript Google Maps API hakkında CSS ile yapılır.

+0

Merhaba, biraz daha ayrıntılı deneyin. Denediğin şeyin bazı kodları olabilir. –

cevap

30

Evet, bu mümkün.

iOS MapKit uygulamasında, viewForAnnotation temsilci yöntemini uygulamanız ve MKAnnotationView ürününe UILabel ekleyerek geri göndermeniz gerekir. Örneğin

:

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

haritası görünümün delegate mülkiyet aksi takdirde bu temsilci yöntemi denir almazsınız belirlendiğinden emin olun ve bunun yerine varsayılan kırmızı işaretçilerine alacak.

+0

Hızlı yanıt için çok teşekkür ederim. Yakında bu kodu test edeceğim. Yakında görüşürüz. – joumerlin

+0

İyi çalışıyor, teşekkürler ... – joumerlin

2

Burada yukarıda Anna sitesindeki açıklamada belirtilen temsilci yöntemin Swift 3 varyasyonu. Sınıfınızın MKMapViewDelegate ile uyumlu olduğundan ve mapView'ın temsilcisinin viewDidLoad() öğesinde self olarak ayarlandığından emin olun.

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 
} 
İlgili konular