2009-09-10 3 views
3

나는 약 1000 개의 MKPinAnnotationView가 화면 상에 동시에있는 MKMapView를 가지고있다.MKMapView 및 dequeueReusableAnnotationViewWithIdentifier :

스크롤 속도가 매우 느립니다.

내가 지금처럼 적절하게 내 주석보기를 큐에서 시도하고있다 :

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 
    static NSString *viewIdentifier = @"annotationView"; 
    MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:viewIdentifier]; 
    if (annotationView == nil) { 
     annotationView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:viewIdentifier] autorelease]; 
    } 

    return annotationView; 
} 

는 그러나 나의 주석 뷰를 재사용되지 않습니다! 내지도에는 동시에 1000 개의 MKPinAnnotationView 인스턴스가 있습니다. 나는 이것이 느린 수행에 기여하고 있다고 느낄 수밖에 없다.

재사용 가능한 주석 뷰를 큐에서 제거하는 올바른 방법입니까? 동시에 같은 화면에 모두 있기 때문에 별도의 인스턴스가 필요하므로 재사용되지 않습니까?

수많은 화면상의 핀을 사용하여 스크롤링 속도를 높이는 데 유용한 정보가 있습니까?

답변

2

지도가 모든 방법은 그냥 아무 이유없이 핀을 제거하지 않을 것 다음 축소됩니다. 핀은 보이지 않을 때만 벗어나게됩니다.

1000 개의지도 핀이 기본적으로 모든 장치에 대해 안정적인 것으로 간주되는 것의 상한을 훨씬 능가하는 것으로 말할 수 있습니다. 이전 장치는 훨씬 적습니다.

iPhone 3G와 같은 오래된 장치는 챕터보기를 시작하기 전에 100-150까지 모자라기도합니다 (물론 응용 프로그램이 무엇을하는지에 따라 다릅니다).

MKMapView를 광범위하게 사용하는 앱을 작성하고 기기 유형에 따라지도에 표시되는 핀 수를 제한하도록 로직을 설정해야합니다.

이 개 잠재적 인 솔루션

1

) 사용자가 지금까지 그들은 같은 시간에 모든 핀을 볼 수 있음을 확대 할 수 있도록지도의 줌 범위를 제한이 있습니다 (I 실제로 이런 짓을하지 않은 그 전에 가능한지는 모르지만 그 아이디어가 될 것입니다.)

2) 표시된 핀을 제한하는 필터를 생성하십시오.

1

코드가 올바르게 표시됩니다. 핀은 화면에있는 동안 다시 사용되지 않습니다. 스크린에서 꺼지는 즉시 다시 사용할 수 있습니다.

필자는 핀 수가 많아지면 어쨌든 구분하기 어려울 것이라고 생각합니다. 사용자 필터 옵션이나 비슷한 것을 제공하여 화면의 핀 수를 줄일 수 있습니까?