如何知道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决定更改其框架,您将能够在一个点上快速重构代码
- 更可测试
- 更具可读性和清洁性