How to know whether MKMapView visibleMapRect contains a Coordinate?

前端 未结 3 1953
情歌与酒
情歌与酒 2021-02-03 09:46

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

3条回答
  •  离开以前
    2021-02-03 10:35

    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

提交回复
热议问题