Xcode 为什么在模拟器中滚动mkmapview时多次不必要地触发viewForAnnotation?

Xcode 为什么在模拟器中滚动mkmapview时多次不必要地触发viewForAnnotation?,xcode,scroll,mkmapview,zooming,mkannotationview,Xcode,Scroll,Mkmapview,Zooming,Mkannotationview,我在mkmapview上放置了128个引脚。一旦我双击地图或使用我放入的滑块放大地图,然后滚动地图一两次,地图会自动滚动一段时间,然后自动缩小,然后停止。在此期间,按顺序触发以下方法 regionDidChangeAnimated viewForAnnotation - several times fired in succession didAddAnnotionViews viewForAnnotation - 30 to 40 times fired in succession did

我在mkmapview上放置了128个引脚。一旦我双击地图或使用我放入的滑块放大地图,然后滚动地图一两次,地图会自动滚动一段时间,然后自动缩小,然后停止。在此期间,按顺序触发以下方法

regionDidChangeAnimated
viewForAnnotation  - several times fired in succession
didAddAnnotionViews
viewForAnnotation  - 30 to 40 times fired in succession
didAddAnnotionViews
regionDidChangeAnimated
regionDidChangeAnimated
触发方法的顺序和频率取决于滚动操作。 有人能告诉我为什么会发生这种情况,并自动滚动一段时间,然后自动缩小然后停止吗

多谢各位

相关代码如下所示

- (void)viewDidLoad
{
    [super viewDidLoad];
    for (XMLItem *item in [post items]) {
        CLLocationCoordinate2D theCoordinate;
        theCoordinate.latitude = [[item latitude] floatValue];
        theCoordinate.longitude = [[item longitude] floatValue];
        MapAnnotation *mapAnn = [[MapAnnotation alloc] init];
        mapAnn.coordinate = theCoordinate;
        mapAnn.title = [item landmark];
        mapAnn.subtitle = [item title];
        [mapView addAnnotation:mapAnn];
        [mapAnn release];
    }


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

- (IBAction)zoomSliderChanged
{
    float sliderValue = 7 -[zoomSlider value];
    int spanMeter = (int)powf(10.0, sliderValue) * 5;
    MKCoordinateRegion region1;
    region1.center.latitude = 34.050499;
    region1.center.longitude = -118.255302;
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (region1.center,                            spanMeter , spanMeter);    
    [self.mapView setRegion:region animated:YES];

}

基本上,您的代码要求映射在didaddAnnotations等中移动。只需不这样做,并将该消息移动到不会调用它的其他位置即可


您还可以添加NSLog,以便在移动地图视图时检查何时调用这些委托方法。

非常感谢您的回复。正如您所建议的,我将didAddAnnotationViews方法中的代码移到viewDidLoad方法末尾附近,并注释掉了didAddAnnotationViews方法。地图本身不会滚动,也不会缩小。我是一个新手,你能解释一下DidAddAnnotationView的用途或者什么时候使用这个方法吗?非常感谢你。