2011-11-24 12 views
8

kırmızı pimini varsayılan:Özel açıklama pimi değişiklikler yapılmadan app de özel açıklama pimini sahip uzun musluktan

- (MKAnnotationView *)viewForAnnotation:(id <MKAnnotation>)point type:(int)state 
{ 
    // Find the KMLPlacemark object that owns this point and get 
    // the view from it. 
    for (KMLPlacemark *placemark in _placemarks) { 
     if ([placemark point] == point) 
     { 
      UIButton *disclosureButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure]; 
      [[placemark annotationView] setCanShowCallout: YES];    
      [[placemark annotationView] setRightCalloutAccessoryView:disclosureButton]; 

      if (state == 0) 
      { 
       [[placemark annotationView] setImage:[UIImage imageNamed:@"ic_pin_tour.png"]]; 
      } 
      else 
      { 
       [[placemark annotationView] setImage:[UIImage imageNamed:@"ic_pin_point.png"]]; 
      } 

      return [placemark annotationView]; 
     } 
    } 
    return nil; 
} 
: Ben özel bir görünüm dönmek ve bu şekilde İşareti'nin annotationView için setImage yapmak

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    return [kml viewForAnnotation:annotation type:state]; 
} 

fakat eğer açıklama notuma uzunca dokunursam, görünümü varsayılan görünümüne (RedPin) değiştirir. Uzun muslukta hangi yöntemin çağrıldığını anlayamıyorum. UITapGestureRecognizer ile oynamayı denedim, ancak bulamadım. Eğer ek açıklama pinine dokunursam her şey iyi çalışıyor ve özel açıklama pinim görünümü kaybolmuyor. Bu ekran görüntüsünde ne demek istediğimi görebilirsiniz: so useful image with example

Peki neden ek açıklama iğnesi görünümü uzun dokunuşta değişir?

cevap

23

Yani, bir ek açıklama görüntüsü için özel bir resim kullanmak isterseniz, her zaman MKPinAnnotationView yerine genel bir MKAnnotationView kullanın. Ben artık düzgün MKAnnotationView her şeyi ile çalışır değiştirdiğinizde ben, sadece bir yerde MKPinAnnotationView vardır:

- (MKAnnotationView *)annotationView 
{ 
    if (!annotationView) { 
     id <MKAnnotation> annotation = [self point]; 
     if (annotation) { 
      MKAnnotationView *pin = 
       [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil]; 
      pin.canShowCallout = YES; 
      annotationView = pin; 
     } 
    } 
    return annotationView; 
} 
+0

teşekkür ederiz. bana çok yardım etti. –

+1

Çekicilik olarak çalıştı. Gerçek şu ki, MKPinAnnotation görünümü, istemediğiniz işlevselliğe sahip MKAnnotation görünümü olan bir alt sınıftır. – igraczech