Почему viewForAnnotation многократно запускается при прокрутке mkmapview в симуляторе? - PullRequest
1 голос
/ 23 марта 2012

Я поставил 128 выводов на 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];

}

1 Ответ

0 голосов
/ 23 марта 2012

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

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

...