2012-03-23 1 views
1

mkmapview에 128 개의 핀을 넣었습니다. 지도를 두 번 클릭하거나 내가 넣은 슬라이더를 사용하여지도를 확대 한 다음지도를 한두번 스크롤하면지도가 잠시 동안 스크롤되고 그 자체가 축소되어 멈 춥니 다. 그 시간 동안 다음 방법들이 순서대로 해고됩니다.시뮬레이터에서 mkmapview를 스크롤 할 때 viewForAnnotation이 불필요하게 여러 번 실행되는 이유는 무엇입니까?

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 등으로 이동지도를 요청하는 간단하지 않습니다 그리고 그것은 호출되지 않습니다 어디 다른 곳에서 해당 메시지를 이동합니다.

mapview를 움직일 때 NSLog를 추가하여 이러한 위임 메서드가 호출되는시기를 확인할 수도 있습니다.

+0

답장을 보내 주셔서 감사합니다. 제안한대로 viewDidLoad 메서드의 끝 부분에서 didAddAnnotationViews 메서드의 코드를 바로 이동하고 didAddAnnotationViews 메서드를 주석 처리했습니다. 그리고지도 자체가 축소되거나 축소되지 않습니다. 저는 초보자이며 didAddAnnotationViews의 목적이나 그 방법을 언제 사용할 것인지 설명 할 수 있습니까? 대단히 감사합니다. – user1026669

관련 문제