Xcode 为什么在模拟器中滚动mkmapview时多次不必要地触发viewForAnnotation?
我在mkmapview上放置了128个引脚。一旦我双击地图或使用我放入的滑块放大地图,然后滚动地图一两次,地图会自动滚动一段时间,然后自动缩小,然后停止。在此期间,按顺序触发以下方法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
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的用途或者什么时候使用这个方法吗?非常感谢你。