2011-09-18 13 views
10

Utworzono adnotację, którą dodaję do MKMapView. Jak miałbym mieć niestandardowy obrazek zamiast standardowej czerwonej pinezki?Niestandardowy obraz dla 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 

Odpowiedz

1

Zastępuje metodę delegata mapView:viewForAnnotation:. Jeśli parametr annotation wskazuje na jedną z Twoich niestandardowych adnotacji, zwróć niestandardowy widok, który będzie wyglądał tak, jak lubisz.

+0

Czy możesz wskazać mi przykład, jak to zrobić? Jestem nowy w stosunku do celu c. Dzięki – 3sl

18

MKMapView dostaje swoje poglądy pin od sposobu jej delegata mapView:viewForAnnotation: Więc trzeba:

  1. Ustaw kontroler widoku za delegata mapy.
  2. Implementacja mapView: viewForAnnotation: w kontrolerze.

Ustaw kontroler jako delegat

@interface MapViewController : UIViewController <MKMapViewDelegate> 

Mark interfejs z protokołem delegata. To pozwala ci ustawić kontroler jako delegata MKMapView w Interface Builder (IB). Otwórz plik .xib zawierający mapę, kliknij prawym przyciskiem myszy MKMapView i przeciągnij wylot delegate do kontrolera.
Jeśli wolisz używać kodu zamiast IB, dodaj self.yourMapView.delegate=self; w metodzie viewDidLoad kontrolera. Wynik będzie taki sam.

Wdrożenie MapView: 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

Aby ustawić niestandardowy obraz zamiast standart MKPinAnnotationView jedynym sposobem na to jest użycie MKAnnotationView z funkcją - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation. Oto przykład:

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

Dla wartości aView.image Można ustawić własne zdjęcie. Zobacz także odwołanie do klasy MKAnnotationView, aby lepiej z nim radzić.

Powiązane problemy