MKAnnotationView
에 사용자 정의 이미지를 성공적으로 설정하여 핀을 교체했습니다 (기능은 setImage
입니다). 그러나 MKMapView
유형이 "표준"인 경우에만 작동합니다. Satellite 및 Hybrid 모드는 항상 핀을 표시합니다.위성지도 모드로 이미지가있는 MKAnnotationViews
누군가가이 이상한 문제를 해결할 생각이 있습니까?
MKAnnotationView
에 사용자 정의 이미지를 성공적으로 설정하여 핀을 교체했습니다 (기능은 setImage
입니다). 그러나 MKMapView
유형이 "표준"인 경우에만 작동합니다. Satellite 및 Hybrid 모드는 항상 핀을 표시합니다.위성지도 모드로 이미지가있는 MKAnnotationViews
누군가가이 이상한 문제를 해결할 생각이 있습니까?
이상한 두 제목 (사용자 지정 MKAnnotationView 및 맵 모드)은 서로 연결되어 있지 않습니다.
당신은 핀을 교체하는 방법은 이상한 (setImage?)를 보인다는 "고전적인"방법은
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation
을 구현하고 MKMapViewDelegate
프로토콜을 수행하기 위해 대리인에 사용자 정의 주석보기를 반환하는 것입니다.
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 메소드에서 이미지를 설정하면 이미지가 손실되지 않습니다 (인스턴스에 대해 항상 설정되므로).
이 정보가 도움이됩니까?
MKPinAnnotationView의 이미지를 변경하려고 할 때도 똑같은 문제가있었습니다. mapView가 setImage를 기본 이미지와 함께 호출하기 때문에 setImage를 호출하는 것이 지속되지 않는 것으로 보입니다.
- (void)setImage:(UIImage *)image {
[super setImage:[UIImage imageNamed:@"MyCustomPinImage.png"]];
}
대답은 MKAnnotationView 대신 MKPinAnnotationView을 사용하는 것입니다 :이 솔루션은 항상 사용자 정의 이미지를 설정하는 MKPinAnnotationView를 서브 클래스와 setImage을 무시하는 것입니다.
iOS MapKit Changing mapview maptype causes annotation image to change to pin?