Как я могу ограничить панорамирование и ограничить масштабирование определенной области яблочных карт в MapKit? - PullRequest
0 голосов
/ 08 июля 2019

В настоящее время я делаю приложение с картой, которая должна фокусироваться только на определенном месте. Я бы хотел, чтобы пользователь не мог уменьшать или перемещать изображение из этой области, чтобы он мог сосредоточиться на наложении изображения, которое я наложил на эту область.

Чтобы приложение запускалось из нужного мне местоположения, а не с какой-то случайной карты, я использовал учебник Рэя Вендерлиха: https://www.raywenderlich.com/425-mapkit-tutorial-overlay-views

Как бы я смог выполнить мою задачу на основе кода, который написан в учебном руководстве выше? Я закончил учебник, поэтому я ищу помощи в добавлении любого кода и определении, где и какой код поместить.

Я нашел другие учебники по этой теме бесполезными, потому что они были для других типов карт, таких как карты Google или MapBox. Яблочный сайт о MapKit и MaximumZ мне тоже не очень помогает.

Я новичок в XCode и Swift, и раньше у меня был только небольшой опыт работы с Python. Я надеялся, что ограничение масштабирования и доступ пользователей к частям карт будет проще ...

override func viewDidLoad() {
  super.viewDidLoad()

  let latDelta = park.overlayTopLeftCoordinate.latitude -
    park.overlayBottomRightCoordinate.latitude

  // Think of a span as a tv size, measure from one corner to another
  let span = MKCoordinateSpanMake(fabs(latDelta), 0.0)
  let region = MKCoordinateRegionMake(park.midCoordinate, span)

  mapView.region = region
}

Это то, что у меня есть для запуска приложения в нужном месте, используя прямоугольник, ограничивающий область, которой я хочу ограничить пользователя.

1 Ответ

0 голосов
/ 08 июля 2019

MKMapView имеет делегата MKMapViewDelegate.Этот протокол имеет функцию с именем:

func mapViewDidChangeVisibleRegion(_:)

Этот метод вызывается всякий раз, когда пользователь прокручивает или увеличивает карту.В этом методе вы можете указать поведение карты.Например, вы можете установить конкретный регион, в который вы хотите увеличить масштаб карты, и указать максимально допустимый уровень масштабирования.

В функции mapViewDidChangeVisibleRegion (_ :) вы можете проверить, в какие значения latitudeDelta и longitudeDelta может увеличиваться карта.Если дельта опускается ниже или выше определенного уровня, вы можете заблокировать масштабирование, установив регион следующим образом:

func mapViewDidChangeVisibleRegion(_ mapView: MKMapView) {

    if mapView.region.span.latitudeDelta < 0.4 {
        regionSpan = MKCoordinateSpan(latitudeDelta: 0.4, longitudeDelta: 0.5)
        let mapRegion = MKCoordinateRegion(center: self.centerCoordinate, span: self.regionSpan)
        self.trackMapView.setRegion(mapRegion, animated: true)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...