Có một số cách xấu để đi về những gì tôi muốn làm, nhưng điều này có vẻ giống như một trong những trường hợp "phải có một cách tốt hơn".Hợp nhất các chú thích trên một MKMapView thu nhỏ
Tôi đang sử dụng MKMapView trong ứng dụng iPhone hiển thị một số chú thích. Giả vờ thảo luận khái niệm rằng mỗi thị trấn ở một tiểu bang của Hoa Kỳ có chú thích, vì vậy có một đống chú thích khá dày đặc trên màn hình. Khi người dùng thu nhỏ bản đồ, các chú thích đó bắt đầu đan xen với nhau, cho đến khi chúng chồng lên nhau và trở nên khó chọn riêng lẻ. Những gì tôi muốn làm là, ở mật độ cụ thể của chú thích (nói khi có chú thích trùng lặp), hãy hợp nhất các chú thích đó thành một chú thích cho biết nó bao gồm một số chú thích phụ (một số chỉ báo trực quan để nói). , "phóng to và bạn sẽ thấy nhiều chú thích hơn").
Tôi có thể gọi CGRectIntersectsRect trên chế độ xem chú thích, nhưng việc sử dụng đó có vẻ là vấn đề N^2 - tôi sẽ phải lặp qua từng chú thích cho mỗi chú thích. Xem xét giả này:
FOR firstAnnotationView IN allAnnotationViews FOR secondAnnotationView in allAnnotationViews IF CGRectIntersectsRect(firstAnnotationView.frame, secondAnnotationView.frame) // found two overlapping annotations, consolidate them ENDIF ENDFOR ENDFOR
Bạn có thể thấy lý do tại sao điều đó sẽ chậm, và nó sẽ phải chạy mỗi khi bản đồ được phóng to hoặc ra!
Vậy tất cả các bạn sẽ phát hiện các chú thích chồng chéo trên bản đồ và theo cách hiểu biết về hiệu suất, hãy hợp nhất chúng một cách thông minh?
Hãy xem xét không gian tìm kiếm của bạn. Có cần phải xem xét tất cả các chú thích trong vòng lặp bên ngoài của bạn không? Điều gì về chỉ đơn giản là đánh giá các chú thích hiện đang xem? –