2010-11-08 39 views
13

Tôi có khoảng 400 MKAnnotationView sẽ tải đồng thời vào MKMapView.Tải chú thích cho vùng hiển thị trong MKMapView

Tôi hiểu rằng điều này không tốt, nó hơi chậm và tôi muốn thực hiện theo cách "chính xác".

tôi phóng to bản đồ của tôi bởi một trung tâm phối hợp:

MKCoordinateSpan span; 
span.latitudeDelta = 0.8; 
span.longitudeDelta = 0.8; 

MKCoordinateRegion region; 
region.span = span; 

region.center = self.selectedCounty.coordinate; 

[mapView setRegion:region animated:TRUE]; 

Tôi chỉ muốn tải các chú thích đó có thể là có thể nhìn thấy trong khu vực đó.

Tôi có MKAnnotation tùy chỉnh được gọi đơn giản là "Chú thích" với thuộc tính CLLocationCoordinate2D- và tựa đề.

Tôi chỉ muốn tải chú thích cho "khu vực hiển thị" trên MKMapView để không phải tất cả các chú thích đều tải cùng một lúc. Và khi "khu vực hiển thị" trên các thay đổi MKMapView, tôi tất nhiên muốn tải chú thích cho khu vực đó.

Tôi biết rằng MKMapView có phương thức ủy nhiệm chạy khi vùng thay đổi.

Nhưng làm cách nào để biết tôi nên tải chú thích nào cho khu vực đó?

Trả lời

-2

Bạn có thể lấy khoảng và vùng bản đồ và dựa trên vị trí của chú thích mà bạn có thể kiểm tra xem có chú thích nào nằm trong vùng đó ... có thể nó được triển khai trong [mapview isAnnotationVisible] ... nhưng bạn sẽ phải kiểm tra tất cả mọi người của các chú thích cuối cùng ...

+1

Tôi xin lỗi. Nhưng tôi thực sự, thực sự không hiểu câu trả lời của bạn. –

+1

Khi tôi thêm chú thích vào MapView của mình, tôi muốn kiểm tra: if (thisAnnotationBelongsToTheVisibleRegion) sau đó addAnnotation. –

+0

Nó không tồn tại một chức năng như vậy. –

21

http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MapKitFunctionsReference/Reference/reference.html

MKMapRectContainsPoint sẽ cho bạn biết nếu nó là nhìn thấy được.

visibleCount = 0; 
for (MyAnnotation *annotation in mapView.annotations) { 
    if (MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(annotation.coordinate))) 
    { 
     visibleCount++; 
    } 
} 

Tôi khuyên bạn nên thực hiện phương pháp này trên chuỗi nền nếu bạn có nhiều chú thích. nhưng bạn có thể xác định xem nó có hiển thị trong bản đồ

+0

Cảm ơn những người bình chọn tích cực. Tôi vui vì điều này đang giúp mọi người với các ứng dụng bản đồ của họ. –

+0

Câu trả lời này phải được chấp nhận là câu trả lời thực. – Camsoft

+2

không, đây KHÔNG phải là câu trả lời chính xác, nó yêu cầu kiểm tra mọi chú thích trên bản đồ, xem câu trả lời bên dưới và tài liệu hướng dẫn cho phương thức chú thíchInMapRect có nội dung "Phương pháp này nhanh hơn nhiều so với tìm kiếm tuyến tính của các đối tượng trong tự chú thích thuộc tính. ", chú thíchInMapRect sử dụng một cây để lưu trữ và tìm kiếm các điểm. –

36
MKMapRect visibleMapRect = mapView.visibleMapRect; 
NSSet *visibleAnnotations = [mapView annotationsInMapRect:visibleMapRect]; 
+6

đây là câu trả lời đúng, cách nhanh hơn phương pháp, đó là nhật ký n trái ngược với N. –

Các vấn đề liên quan