Nếu tôi có MKMapView và CLLocationCoordinate2D, làm cách nào để kiểm tra xem vùng hiển thị của bản đồ có chứa tọa độ không?Làm thế nào để biết xem MKMapView visibleMapRect có chứa một Coordinate?
11
A
Trả lời
29
Cách nhanh nhất là sử dụng các chức năng sẵn có của Apple sẽ làm cho loại điều này cực nhanh!
if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate)))
{
//Do stuff
}
Trường hợp tọa độ là CLLocation2D của bạn.
Điều này sẽ nhanh hơn nhiều so với cách tính tọa độ với câu lệnh if bulk. Lý do là Apple sử dụng Quadtree và có thể thực hiện tra cứu nhanh cho bạn.
2
Swift 3 tương thích
Nếu bạn thường xuyên làm việc với bản đồ tôi đề nghị bạn để tạo ra một phần mở rộng như thế này:
extension MKMapView {
func contains(coordinate: CLLocationCoordinate2D) -> Bool {
return MKMapRectContainsPoint(self.visibleMapRect, MKMapPointForCoordinate(coordinate))
}
}
Sau đó, bạn có thể sử dụng bất cứ nơi nào, ví dụ:
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
if mapView.contains(coordinate: mapView.centerCoordinate) {
// do stuff
}
}
Bằng cách này, bạn giữ mã:
- dễ bảo trì hơn: nếu Apple quyết định thay đổi khuôn khổ của nó, bạn sẽ có thể làm một cấu trúc lại nhanh chóng thay đổi mã trong một điểm duy nhất
- kiểm chứng hơn
- dễ đọc hơn và sạch