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
}
}
通過這種方式您可以保留代碼: