2011-09-18 2 views
10

MKMapView에 추가 할 주석을 만들었습니다. 표준 적색 핀 대신 사용자 정의 이미지를 갖는 방법은 무엇입니까?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 

답변

1

mapView:viewForAnnotation: 대리자 메서드를 재정의하십시오. annotation 매개 변수가 사용자 지정 주석 중 하나를 가리키는 경우 원하는대로 보이는 사용자 정의보기를 반환하십시오.

+0

이 작업을 수행하는 방법에 대한 예제를 가르쳐 주시겠습니까? 나는 객관적으로 새로운 c 다. 감사 – 3sl

18

MKMapView가 대리자 메서드 mapView:viewForAnnotation:에서 핀에서보기를 얻을 그래서 당신은에 :

  1. 지도의 대리인으로보기 컨트롤러를 설정합니다.
  2. 컨트롤러에서 mapView : viewForAnnotation :을 구현합니다.

는 위임

@interface MapViewController : UIViewController <MKMapViewDelegate> 

마크 위임 프로토콜과 인터페이스 컨트롤러를 설정합니다. 이것은 인터페이스 빌더 (IB)에서 컨트롤러를 MKMapView의 델리게이트로 설정합니다. 지도가 포함 된 .xib 파일을 열고 MKMapView를 마우스 오른쪽 단추로 클릭 한 다음 delegate 콘센트를 컨트롤러로 드래그하십시오.
IB 대신 코드를 사용하려면 컨트롤러의 viewDidLoad 메서드에 self.yourMapView.delegate=self;을 추가하십시오. 결과는 동일합니다.

지도보기를 구현 : 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 그 기능 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation으로 MKAnnotationView을 사용하는 것입니다 할 수있는 유일한 방법 대신에 사용자 정의 이미지를 설정합니다. 예를 들면 다음과 같습니다.

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

aView.image 값의 경우 사용자가 직접 이미지를 설정할 수 있습니다. 또한 더 잘 처리하려면 MKAnnotationView 클래스 참조를 살펴보십시오.