在启动时可以在MKMapView中可靠地选择注释(在ios 6和ios 5.1中)?

时间:2012-10-16 09:20:43

标签: ios ios5 mkmapview ios6

从我想要转到MapViewController的事件的详细视图中,放大注释,然后打开它的标注。 以下是一些相关代码:

@interface MapViewController : UIViewController<MKMapViewDelegate>
...
- (void) viewWillAppear:(BOOL)animated
{
  [self displayAnnotations];
}

- (void) viewDidAppear:(BOOL)animated
{
    ...
    // Zoom in to event
    [map setRegion:region animated:YES];        
}

- (void) mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
   ...
   regionAnimationEnded = YES;
   [self selectAnnotation:a];
   ...
}

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
   ...
   // check to see if the right view is in the array
   ...
   annotationViewDidAppear = YES;
   [self selectAnnotation:a];
   ...   
}

- (void) selectAnnotation:(id<MKAnnotation>)annotation
{
   if(annotationViewDidAppear && regionAnimationEnded)
   {
     if(!openedAnnotationFirstTime)
     {
        [map selectAnnotation:annotation animated:YES];
        openedAnnotationFirstTime = YES;
     }
   }
}

这适用于ios 6模拟器,但在ios 5.1模拟器上(以及在设备上),注释视图不可见,如文档中所述:

  

(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views       调用此方法时,指定的视图已添加到地图中。

所以它取决于哪个首先完成:如果区域更改动画最后完成并且注释视图已经出现它可以工作,否则它不会。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您的selectAnnotation:方法被调用两次。请尝试在mapView:regionDidChangeAnimated:委托方法中调用一次。

答案 1 :(得分:0)

我最终在实际[map selectAnnotation:annotation animated:YES]上使用延迟执行选择器; 这是一种解决方法,但似乎运作良好。