2011-01-29 29 views
6

我一直在玩MKMapView,並試圖讓我的頭像MKMapViewDelegate系統如何工作。到目前爲止,我沒有在添加當前位置標記時讓didAddAnnotationViews被調用的運氣。didAddAnnotationViews無法在MKMapView上工作

我已經設置了我的應用程序委託來實現MKMapViewDelegate,我有一個Outlet到我的xib中的MapView,並將MapView的委託屬性設置爲self,就像在應用程序委託實例中一樣。我已經在應用程序委託中實現了didAddAnnotationViews,我只需NSLog對它的任何調用,如下所示。該地圖設置爲顯示當前位置,並在啓動時添加藍色引腳註釋,但由於某些原因,未添加AddAnnotationViews。

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views{ 
    NSLog(@"Annotation added!"); 
} 

任何想法,我可能錯過了?

回答

3

mapView:didAddAnnotations:僅響應於addAnnotation:addAnnotations:而被調用。用戶位置引腳不會觸發此委託方法。

+1

謝謝,你確定嗎?我確實在想這是否是這種情況,但我一直在關注iPhone編程的Big Nerd Ranch書中的WhereAmI教程,並且非常清楚地指出,當添加藍點代表當前位置時,將會調用didAddAnnotationViews。事實上,它提供了一個代碼塊用於在didAddAnnotationsView中設置當前區域以放大當前位置。這對作者來說似乎是一個巨大的失誤。 – BenBtg 2011-01-30 00:17:49

5

我在BNR中遇到過同樣的問題。以下是我最終使用:

// Tell MKMapView to zoom to current location when found 
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    NSLog(@"didUpdateUserLocation just got called!"); 

    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([userLocation coordinate], 250, 250); 
    [mapView setRegion:region animated:YES]; 
} 
0

只是想確認我能得到這個工作使用

- (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views 
{ 
    MKAnnotationView *annotationView = [views objectAtIndex:0]; 
    id <MKAnnotation> mp = [annotationView annotation]; 
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate], 250,250); 
    [mv setRegion:region animated:YES]; 
} 

確保您使用的 mapView.delegate =自我; 或 [mapView setDelegate:self];