2014-06-05 62 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