If I have a MKMapView and a CLLocationCoordinate2D how do you test whether the map's visible area contains the coordinate?
The fastest way is to use the inbuilt Apple functions which will make this sort of thing super quick!
if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate)))
{
//Do stuff
}
Where coordinate is your CLLocation2D.
This will be much faster than working out coordinates with a bulk if statement. Reason is that Apple use a Quadtree and can do fast lookups for you.
Swift 3 compatible
If you frequently work with maps I suggest you to create an extension like this:
extension MKMapView {
func contains(coordinate: CLLocationCoordinate2D) -> Bool {
return MKMapRectContainsPoint(self.visibleMapRect, MKMapPointForCoordinate(coordinate))
}
}
Then you can use wherever, for example:
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
if mapView.contains(coordinate: mapView.centerCoordinate) {
// do stuff
}
}
In this way you keep the code:
- more maintainable: if Apple decide to change its frameworks you will able to do a fast refactor changing code in a single point
- more testable
- more readable and clean
来源:https://stackoverflow.com/questions/16239443/how-to-know-whether-mkmapview-visiblemaprect-contains-a-coordinate