2011-06-08 42 views
4

我有一個帶有幾個覆蓋圖的MKMapView。工作一切都很好,這是多麼簡單的工作令人難以置信。然而,有一件事我無法工作。這個想法很簡單:當用戶在覆蓋區覆蓋的區域內點擊時,必須提供帶有關於該覆蓋物的一些信息的標註。覆蓋層全部爲MKPolygon,它們遵循MKOverlay協議以及MKAnnotation協議。攻擊覆蓋圖時顯示標註

MKOverlay協議符合 MKAnnotation協議。因此, 所有覆蓋對象也都是 註釋對象,並且可以將 視爲代碼中的一個或兩個。 如果您選擇將疊加對象 同時視爲兩個對象,那麼您需要負責管理該對象的兩個位置的 。如果 要顯示都爲它的覆蓋 視圖和註釋視圖,您 必須實現的 的MapView:viewForOverlay:和 的MapView:viewForAnnotation:方法 您的應用程序委託。它也是 意味着您必須從地圖的疊加層和 註釋數組中添加和刪除 對象。

這來自Apple文檔。我試過這樣的事情:

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

     MKAnnotationView *aView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil]; 
     aView.canShowCallout = YES; 
} 

但這似乎並不奏效。我用手勢識別試過,但我不知道如何表達等的標註比使用財產...

回答

7

我想你必須將MKOverlays添加爲註釋也

[self.mapView addAnnotations:myOverlays]; 

然後返回未隱藏的(mapView:viewForAnnotation)中的MKAnnotationView,可以是圖形(可點擊)或零alpha視圖。接下來,爲每個MKOverlayView添加一個UITapGestureRecognizer,確保它適用於地圖的手勢(用於同時識別的UIGestureRecognizerDelegate實現)。最後當你的手勢識別器發生這樣的事情時

[self.mapView setSelectedAnnotations:[NSArray arrayWithObject:myOverlayView.overlay]]; 

我不確定這是否真的觸發了callOut顯示。 也請確保您的覆蓋物對象返回標題和/或字幕。

+0

謝謝你的回答。當我將引腳的alpha設置爲零時,標註自動獲得該alpha,所以這不是一個真正的選項。但是,當用戶輕擊疊加層時,我可以讓該針顯示,以便可以看到針和標註。我現在通過使用'mapView:didSelectAnnotationView:'和'mapView:didDeselectAnnotationView:'得到了這個工作。如果您在展示宣傳信息時隱藏了標識,這會很棒,但這並不重要。 – 2011-06-09 08:25:55

+0

當我說0 alpha視圖,我的意思是圖像/ [清除顏色]不是annotationView.alpha = 0,使一個空白PNG放在它上面或使annotationView一個明確的清晰顏色背景視圖的抽象大小。 – tsakoyan 2011-06-09 14:23:44

+0

啊,呃!它的工作方式太棒了,非常感謝! – 2011-06-10 07:07:30