Wenn ich ein MKMapView und ein CLLocationCoordinate2D haben, wie testen Sie, ob der sichtbare Bereich der Karte enthält die Koordinaten?Woher wissen Sie, ob MKMapView visibleMapRect eine Koordinate enthält?
11
A
Antwort
29
Der schnellste Weg ist die integrierten Apple-Funktionen zu verwenden, die diese Art der Sache machen super schnell!
if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate)))
{
//Do stuff
}
Wo Koordinate ist Ihre CLLocation2D.
Dies ist viel schneller als Koordinaten if-Anweisung mit einer Masse ausarbeitet. Grund ist, dass Apple einen Quadtree verwendet und schnelle Suchvorgänge für Sie durchführen kann.
2
Swift 3 kompatibel
Wenn Sie häufig mit Karten arbeiten Ich schlage vor, Sie eine Erweiterung wie diese zu erstellen:
extension MKMapView {
func contains(coordinate: CLLocationCoordinate2D) -> Bool {
return MKMapRectContainsPoint(self.visibleMapRect, MKMapPointForCoordinate(coordinate))
}
}
Dann können Sie verwenden, wo immer, zum Beispiel:
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
if mapView.contains(coordinate: mapView.centerCoordinate) {
// do stuff
}
}
Auf diese Weise halten Sie den Code:
- mehr wartbar: in einem einzigen Punkt, wenn Apple entscheidet, seine Rahmenbedingungen ändern Sie können
- mehr prüfbar
- besser lesbar und sauber