If I have a MKMapView and a CLLocationCoordinate2D how do you test whether the map\'s visible area contains the coordinate?
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:
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.
my two cents for swift 5.1
extension MKMapView {
func contains(coordinate: CLLocationCoordinate2D) -> Bool {
return self.visibleMapRect.contains(MKMapPoint(coordinate))
}
}