2009-12-18 4 views
3

MKAnnotationView에 사용자 정의 이미지를 성공적으로 설정하여 핀을 교체했습니다 (기능은 setImage입니다). 그러나 MKMapView 유형이 "표준"인 경우에만 작동합니다. Satellite 및 Hybrid 모드는 항상 핀을 표시합니다.위성지도 모드로 이미지가있는 MKAnnotationViews

누군가가이 이상한 문제를 해결할 생각이 있습니까?

답변

0

이상한 두 제목 (사용자 지정 MKAnnotationView 및 맵 모드)은 서로 연결되어 있지 않습니다.

당신은 핀을 교체하는 방법은 이상한 (setImage?)를 보인다는 "고전적인"방법은

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation

을 구현하고 MKMapViewDelegate 프로토콜을 수행하기 위해 대리인에 사용자 정의 주석보기를 반환하는 것입니다.

0

yonel에서 답변을 확장하려면 이미 생성 된 MKAnnotationView.image 속성의 setImage를 사용하여 MapViewController의 주요 부분에 새 이미지를 설정하면 안됩니다. 주석이 추가 될 때

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

가 그것으로, 당신이지도에서 통보를받을 것입니다 :

MapViewController는 MKMapViewDelgate 방법을 구현해야합니다.

annotationView를 잘라내려면 MKAnnotation을 확장하고 자신 만의 주석 클래스를 만들어야합니다. 이 맞춤 주석 인스턴스를 추가하면 mapView에서이 특수 효과 유형 (즉, 클래스)에 대한 사용자 정의 된 (확장 된, 즉 사용자 고유의) annotation보기를 자동으로 표시 할 수 있습니다.

즉, 대리자 메서드는 사용자 지정 주석이 추가되었다는 것을 알려주므로 주석 클래스를 확인하고 주석 클래스 인 경우 사용자 지정 annotationView의 새 인스턴스를 만듭니다. 당신은이 방법을 직접 구현해야합니다

- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier 

:이다

는 같은이 customAnnotation 클래스의 init 메소드를 사용합니다.

이 방법에서는 setImage를 사용하여 원하는 이미지를 설정할 수 있습니다. 이 annotationView에 사용됩니다.

내가 사용량에 설정된 이미지가지도 유형이 변경되었을 때 전멸했다 추측, 그것은 새로운지도 인 (지도에 대한 annotationView의 새로운 인스턴스를 생성하고 다시 주석을 추가했기 때문에 presumablly이 있었고 Delenate 메소드에서 annnotationViews를 다시 작성).

init 메소드에서 이미지를 설정하면 이미지가 손실되지 않습니다 (인스턴스에 대해 항상 설정되므로).

이 정보가 도움이됩니까?

2

MKPinAnnotationView의 이미지를 변경하려고 할 때도 똑같은 문제가있었습니다. mapView가 setImage를 기본 이미지와 함께 호출하기 때문에 setImage를 호출하는 것이 지속되지 않는 것으로 보입니다.

- (void)setImage:(UIImage *)image { 
    [super setImage:[UIImage imageNamed:@"MyCustomPinImage.png"]]; 
}