2013-04-26 68 views

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