2009-12-18 96 views
3

我成功地在MKAnnotationView上設置了一個自定義圖像來代替引腳(我使用了功能setImage)。 但它只適用於MKMapView類型爲「標準」。衛星和混合模式總是顯示引腳。MKAnnotationViews衛星地圖模式下的圖像

有沒有人有想法解決這個奇怪的問題?

回答

0

奇怪的是,這兩個主題(自定義MKAnnotationView和地圖模式)沒有鏈接在一起。

更換銷的方式似乎很奇怪(setImage?),「經典」的方式,是落實

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

,並返回在您的代理自定義註釋,以便履行MKMapViewDelegate協議。

0

要擴大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方法中設置圖像,它將不會丟失(因爲它始終爲實例設置)。

這有幫助嗎?

2

當我嘗試更改MKPinAnnotationView的圖像時,我遇到了完全相同的問題。看起來,對setImage的調用並不是持久的,因爲mapView現在和當時都會使用默認圖像調用setImage。解決的辦法是繼承MKPinAnnotationView並覆蓋setImage總是設置你的自定義圖像:

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