Подтвердить что ты не робот

Как узнать, содержит ли MKMapView visibleMapRect координату?

Если у меня есть MKMapView и CLLocationCoordinate2D, как вы проверяете, содержит ли видимая область карты координата?

4b9b3361

Ответ 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
  • более читаемый и чистый