如果我有一个 MKMapView 和一个 CLLocationCoordinate2D ,如何测试地图的可见区域是否包含该坐标?
最快的方法是使用内置的苹果功能,这将使这种事情变得非常迅速!
if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate)))
{
//Do stuff
}
其中的 coordinate 是您的 CLLocation2D。
这比使用大量的 if 语句计算坐标要快得多。原因是苹果使用四叉树,可以为您进行快速查找。
如果你经常使用地图,我建议你创建一个类似于以下代码的扩展:
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
}
}
我对Swift 5.1的看法
extension MKMapView {
func contains(coordinate: CLLocationCoordinate2D) -> Bool {
return self.visibleMapRect.contains(MKMapPoint(coordinate))
}
}