2014-06-05 60 views
1

我從MapKit委託遇到異常行爲異常行爲

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation (id<MKAnnotation>)annotation 
{ 
MKAnnotationView *annotationView=[mapView viewForAnnotation:annotation]; 
return annotationView; 
} 

當我的註釋mapkit和setdelegate添加到自當我設置區域像

這種方法不called.But
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(coordinate, 7.5*1609.344 ,7.5*1609.344); 
[productsMapView setRegion:viewRegion animated:YES]; 

然後委託方法是called.I不知道這是爲什麼happening.Some一個幫助

+0

我沒有答案,但是你發佈的方法是錯誤的......'MKAnnotationView * annotaionView = [mapView viewForAnnotation:annotation];'不是正確 – Volker

+0

它是一個mapView實例方法,相反,我們可以使用[mapView dequeueReusableAnnotationViewWithIdentifier:@「productAnnotation」];但結果是一樣的。 – user3710452

+0

你真正的問題是什麼?你爲什麼試圖弄清viewForAnnotation何時被調用? – Anna

回答

1

你需要考慮框架的工作方式。

  1. viewForAnnotation方法僅在框架即將繪製註釋時調用。
  2. 框架僅在顯示位置(包含該註釋)時才繪製註釋。

因此,當您設置您查看區域(其中包含註釋)框架調用viewForAnnotation。 (順便說一句,你在viewForAnnotation方法實現中有邏輯錯誤)

+0

什麼是邏輯錯誤?,我的疑問是隻有當我們設置區域時,纔會繪製註釋?謝謝你的回覆 – user3710452

+0

你在viewForAnnotation方法中調用viewForAnnotation,它是遞歸類型,而應該使用dequeueReusableAnnotationViewWithIdentifier,那就是我的想法。 – Zee