如何强制显示地图注释?

时间:2013-08-28 23:48:05

标签: ios ios6 uiview mkmapview

我想在地图上显示注释,然后选择其中一个。

- (void)someWebServiceCallbackWithResult:(NSDictionary *)mapPins {

    [mapView removeAnnotations:mapView.annotations];
    [mapView addAnnotations:[mapPins allValues]];

    for (Pin *p in [mapPins allValues]) {

      if ([p.name isEqualTo:@"Cafe-Derp"] && mapView.hidden == NO) {

        //selectedMapAnnotationView is returned as nil at this point
        MapAnnotationView *selectedMapAnnotationView = (MapAnnotationView *)[mapView viewForAnnotation:p];
        [self presentPopover:p inMapAnnotationView:selectedMapAnnotationView];
        }
    }
}

但是viewForAnnotation:在if语句中返回nil。

这不应该发生,因为addAnnotations:应该自动显示我地图上的所有图钉。该代码仅在我等待一段时间之后才能使用viewForAnnotation:,如下所示:

double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
  MapAnnotationView *selectedMapAnnotationView = (MapAnnotationView *)[mapView viewForAnnotation:p];
  [self presentPopover:p inMapAnnotationView:selectedMapAnnotationView];
});

为什么会这样?我应该调用地图视图上的方法来触发它刷新吗?

1 个答案:

答案 0 :(得分:0)

我认为你不应该自己使用viewForAnnotation。而是尝试这个

[mapView selectAnnotation:p animated:YES];