How to know whether MKMapView visibleMapRect contains a Coordinate?

≡放荡痞女 提交于 2019-12-03 09:22:41

问题


If I have a MKMapView and a CLLocationCoordinate2D how do you test whether the map's visible area contains the coordinate?


回答1:


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.




回答2:


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



回答3:


my two cents for swift 5.1

  extension MKMapView {

      func contains(coordinate: CLLocationCoordinate2D) -> Bool {
        return self.visibleMapRect.contains(MKMapPoint(coordinate))
    }

 }


来源:https://stackoverflow.com/questions/16239443/how-to-know-whether-mkmapview-visiblemaprect-contains-a-coordinate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!