Я положил 128 контактов на mkmapview. Как только я увеличиваю масштаб карты, либо дважды щелкнув по карте, либо используя ползунок, который я вставляю, а затем прокручиваю карту один или два раза, карта прокручивается сама по себе на некоторое время, а сама масштабируется, а затем останавливается. В течение времени следующие способы запускаются по порядку.Почему viewForAnnotation излишне многократно запускается при прокрутке mkmapview в симуляторе?
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];
}
Большое спасибо за ответ. Как вы предположили, я переместил код в методе didAddAnnotationViews прямо в конце метода viewDidLoad и закомментировал метод didAddAnnotationViews. И карта не прокручивается сама по себе и не уменьшает масштаб. Я новичок, и вы могли бы объяснить цель didAddAnnotationViews или когда использовать этот метод? спасибо. – user1026669