【发布时间】:2013-04-26 14:57:02
【问题描述】:
如果我有一个 MKMapView 和一个 CLLocationCoordinate2D 你如何测试地图的可见区域是否包含坐标?
【问题讨论】:
如果我有一个 MKMapView 和一个 CLLocationCoordinate2D 你如何测试地图的可见区域是否包含坐标?
【问题讨论】:
最快的方法是使用内置的 Apple 功能,这将使这类事情变得超级快!
if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate)))
{
//Do stuff
}
坐标是您的 CLLocation2D。
这将比使用批量 if 语句计算坐标要快得多。原因是 Apple 使用四叉树并且可以为您进行快速查找。
【讨论】:
如果你经常使用地图,我建议你创建一个这样的扩展:
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))
}
}
【讨论】: