Se ho un MKMapView e un CLLocationCoordinate2D, come si verifica se l'area visibile della mappa contiene le coordinate?Come sapere se MKMapView visibleMapRect contiene una coordinata?
11
A
risposta
29
Il modo più veloce è utilizzare le funzioni di Apple integrate che renderanno questo tipo di cose super veloce!
if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate)))
{
//Do stuff
}
Dove coordinare è il vostro CLLocation2D.
Questo sarà molto più veloce di elaborare le coordinate con una dichiarazione di massa se. La ragione è che Apple usa un Quadtree e può fare ricerche veloci per te.
2
Swift 3 compatibile
Se si lavora spesso con le mappe vi suggerisco di creare un interno in questo modo:
extension MKMapView {
func contains(coordinate: CLLocationCoordinate2D) -> Bool {
return MKMapRectContainsPoint(self.visibleMapRect, MKMapPointForCoordinate(coordinate))
}
}
quindi è possibile utilizzare ovunque, ad esempio:
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
if mapView.contains(coordinate: mapView.centerCoordinate) {
// do stuff
}
}
In questo modo si mantiene il codice:
- più gestibile: se Apple decide di cambiare i suoi quadri si sarà in grado di fare un refactoring rapida evoluzione codice in un unico punto
- più verificabili
- più leggibile e pulito