Как узнать, содержит ли MKMapView visibleMapRect координату?
Если у меня есть MKMapView и CLLocationCoordinate2D, как вы проверяете, содержит ли видимая область карты координата?
Ответы
Ответ 1
Самый быстрый способ - использовать встроенные функции Apple, которые сделают эту вещь супер быстрой!
if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate)))
{
//Do stuff
}
Где координата - ваш CLLocation2D.
Это будет намного быстрее, чем вычисление координат с помощью оператора bulk if. Причина в том, что Apple использует Quadtree и может быстро найти вас.
Ответ 2
Совместимость с 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 решит изменить свои фреймворки, вы сможете быстро преобразовать код рефакторинга в одной точке.
- более testable
- более читаемый и чистый