2012-03-23 3 views
1

Я положил 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]; 

}

ответ

0

В принципе, ваш код запроса на карту, чтобы двигаться в didaddAnnotations и т.д. Просто нет и переместить это сообщение в другом месте, где он не будет называться.

Вы также можете добавить NSLog, чтобы проверить, когда вызываются эти методы делегатов, когда вы просто перемещаете mapview.

+0

Большое спасибо за ответ. Как вы предположили, я переместил код в методе didAddAnnotationViews прямо в конце метода viewDidLoad и закомментировал метод didAddAnnotationViews. И карта не прокручивается сама по себе и не уменьшает масштаб. Я новичок, и вы могли бы объяснить цель didAddAnnotationViews или когда использовать этот метод? спасибо. – user1026669

 Смежные вопросы

  • Нет связанных вопросов^_^