如何知道MKMapView visibleMapRect是否包含Coordinate?

如果我有一个MKMapView和一个CLLocationCoordinate2D,你如何测试地图的可见区域是否包含坐标?

最快的方法是使用内置的Applefunction,这将使这种事情超级快!

if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate))) { //Do stuff } 

坐标是你的CLLocation2D。

这比使用批量if语句计算坐标要快得多。 原因是Apple使用Quadtree并且可以为您快速查找。

Swift 3兼容

如果您经常使用地图,我建议您创建如下的扩展程序:

 extension MKMapView { func contains(coordinate: CLLocationCoordinate2D) -> Bool { return MKMapRectContainsPoint(self.visibleMapRect, MKMapPointForCoordinate(coordinate)) } } 

然后你可以在任何地方使用,例如:

 func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) { if mapView.contains(coordinate: mapView.centerCoordinate) { // do stuff } } 

通过这种方式你保持代码:

  • 更易于维护:如果Apple决定更改其框架,您将能够在一个点上快速重构代码
  • 更可测试
  • 更具可读性和清洁性