11
如果我有一个MKMapView和一个CLLocationCoordinate2D,你如何测试地图的可见区域是否包含坐标?如何知道MKMapView visibleMapRect是否包含坐标?
如果我有一个MKMapView和一个CLLocationCoordinate2D,你如何测试地图的可见区域是否包含坐标?如何知道MKMapView visibleMapRect是否包含坐标?
最快的方法是使用内置的苹果功能,这将使这种事情超快!
if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate)))
{
//Do stuff
}
其中坐标是您的CLLocation2D。
这比使用批量if语句计算坐标快得多。原因是Apple使用Quadtree,并且可以为您快速查找。
如果您经常使用的地图工作,我建议你创建一个这样的扩展:
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
}
}
通过这种方式您可以保留代码: