我成功地在MKAnnotationView
上設置了一個自定義圖像來代替引腳(我使用了功能setImage
)。 但它只適用於MKMapView
類型爲「標準」。衛星和混合模式總是顯示引腳。MKAnnotationViews衛星地圖模式下的圖像
有沒有人有想法解決這個奇怪的問題?
我成功地在MKAnnotationView
上設置了一個自定義圖像來代替引腳(我使用了功能setImage
)。 但它只適用於MKMapView
類型爲「標準」。衛星和混合模式總是顯示引腳。MKAnnotationViews衛星地圖模式下的圖像
有沒有人有想法解決這個奇怪的問題?
奇怪的是,這兩個主題(自定義MKAnnotationView和地圖模式)沒有鏈接在一起。
更換銷的方式似乎很奇怪(setImage?),「經典」的方式,是落實
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation
,並返回在您的代理自定義註釋,以便履行MKMapViewDelegate
協議。
要擴大yonel的答案,您不能只使用已創建的MKAnnotationView.image屬性的setImage在MapViewController的主要部分中爲其設置新圖像。
的MapViewController中必須實施的MKMapViewDelgate方法:
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
在這裏面,你會被從地圖通知時添加的註釋。
因此,爲了剪裁您的annotationView,您應該擴展MKAnnotation並創建自己的註記類。您只需添加此自定義註釋實例以讓您的mapView自動顯示此註釋類型(即類)的自定義(擴展,即您自己的)註釋視圖。
也就是說,委託方法會通知您添加了自定義註釋,因此您在那裏檢查註記類,如果它是您的註記類,則創建自定義註記視圖的新實例。
也就是說,要使用init方法本customAnnotation類爲:
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier
你必須自己實現這個方法。
在這種方法中,你可以使用setImage來設置你喜歡的任何圖像。這將用於此註釋視圖。
我猜在你的使用中,當MapType被改變時設置的圖像被擦掉了,大概這是因爲它爲地圖創建了一個annotationView的新實例(這是一個新的地圖並且再次添加註釋並且從委託方法重新創建annnotationViews)。
如果您在init方法中設置圖像,它將不會丟失(因爲它始終爲實例設置)。
這有幫助嗎?
當我嘗試更改MKPinAnnotationView的圖像時,我遇到了完全相同的問題。看起來,對setImage的調用並不是持久的,因爲mapView現在和當時都會使用默認圖像調用setImage。解決的辦法是繼承MKPinAnnotationView並覆蓋setImage總是設置你的自定義圖像:
- (void)setImage:(UIImage *)image {
[super setImage:[UIImage imageNamed:@"MyCustomPinImage.png"]];
}
的答案是使用MKAnnotationView而不是MKPinAnnotationView。
iOS MapKit Changing mapview maptype causes annotation image to change to pin?