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