2011-09-18 12 views
10

Bir MKMapView'a eklediğim ek açıklama yarattım. Standart kırmızı iğnenin yerine özel bir görüntü oluşturmaya nasıl başlarım?Özel görüntü için MKAnnotation

@interface AddressAnnotation : NSObject<MKAnnotation> { 
    CLLocationCoordinate2D coordinate; 
    NSString *title; 
    NSString *subtitle; 
    MKPinAnnotationColor pinColor; 
} 
@property (nonatomic,retain) NSString *title; 
@property (nonatomic,retain) NSString *subtitle; 
@property (nonatomic, assign) MKPinAnnotationColor pinColor; 
@end 

cevap

1

mapView:viewForAnnotation: temsilci yöntemini geçersiz kılın. annotation param, özel ek açıklamalarınızdan birine işaret ediyorsa, beğeninize bakan özel bir görünüm döndürün.

+0

Bunun nasıl yapılacağına dair bir örnek gösterebilir misiniz? Ben objektif için yeniyim c. Teşekkürler – 3sl

18

MKMapView onun temsilci yönteminin mapView:viewForAnnotation: onun pim görüşlerini alır Yani sahip:

  1. haritanın yetki vererek görünüm denetleyicisi ayarlayın.
  2. Harita uygulamasıView: viewForAnnotation: kontrol cihazınızda.

delege

@interface MapViewController : UIViewController <MKMapViewDelegate> 

Mark temsilci protokolü ile arayüz olarak denetleyici ayarlayın. Bu, denetleyiciyi, Arabirim Oluşturucu'da (IB) MKMapView'ın temsilcisi olarak ayarlayalım. Haritanızı içeren .xib dosyasını açın, MKMapView'a sağ tıklayın ve kontrol cihazınıza delegate çıkışını sürükleyin.
IB yerine kod kullanmayı tercih ederseniz, denetleyicinin viewDidLoad yöntemine self.yourMapView.delegate=self; ekleyin. Sonuç aynı olacak.

MapView Uygulamak: viewForAnnotation:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    // this part is boilerplate code used to create or reuse a pin annotation 
    static NSString *viewId = @"MKPinAnnotationView"; 
    MKPinAnnotationView *annotationView = (MKPinAnnotationView*) 
     [self.mapView dequeueReusableAnnotationViewWithIdentifier:viewId]; 
    if (annotationView == nil) { 
     annotationView = [[[MKPinAnnotationView alloc] 
      initWithAnnotation:annotation reuseIdentifier:viewId] autorelease]; 
    } 
    // set your custom image 
    annotationView.image = [UIImage imageNamed:@"emoji-ghost.png"]; 
    return annotationView; 
} 
0

standart MKPinAnnotationView bu işlevin - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation ile MKAnnotationView kullanmaktır yapmanın tek yolu yerine özel resim ayarlayın. Sizin kendi görüntüsünü ayarlayabilirsiniz aView.image değer için

- (nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 

    if ([annotation isKindOfClass:[MKUserLocation class]]) { 
       return nil; 
    } 

    static NSString *identifier = @"Annotation"; 

    MKAnnotationView *aView = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 

    if (!aView) { 
      aView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; 
      aView.image = [UIImage imageNamed:@"Untitled1.png"]; 
      aView.canShowCallout = YES; 
      aView.draggable = YES; 
    } else { 
      aView.annotation = annotation; 
    } 

    return pin; 
} 

: İşte örnek. Ayrıca, daha iyi ele almak için MKAnnotationView sınıf referansına bakın.

İlgili konular