Почему регион меняется при настройке текущего региона? - PullRequest
0 голосов
/ 20 февраля 2019

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

Я не смог найти функцию, которая обновляет или перезагружает карту.Поэтому, наконец, я решил немного изменить регион карты, чтобы пользователь не был обеспокоен.(Немного уменьшите масштаб, например).

self.mapView.setRegion(mapView.region, animated: true)

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

self.mapView.setRegion(MKCoordinateRegion(mapView.visibleMapRect), animated: true)

Этотакже изменил регион карты.

Что я могу сделать?

И вот как я добавляю свои оверлеи

func addCircles() {

    let center = self.myPinView.center
    let origin = self.mapView.convert(center, toCoordinateFrom: mapView)
    let overlay1 = MKCircle(center: origin, radius: 3)
    let overlay2 = MKCircle(center: origin, radius: 7.5)
    let overlay3 = MKCircle(center: origin, radius: 15)
    self.mapView.addOverlay(overlay1)
    self.mapView.addOverlay(overlay2)
    self.mapView.addOverlay(overlay3)

}

И это мой делегат func

func mapView (_mapView: MKMapView, средство визуализацииДля наложения: MKOverlay) -> MKOverlayRenderer {

if overlay is MKCircle {

        let circle = MKCircleRenderer(overlay: overlay)
        circle.fillColor = circle.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.6)
        circle.strokeColor = .red
        return circle

    } else {
        return MKOverlayRenderer()
    }

}

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

На самом деле я решаю свою особую проблему с другой точки зрения.Моя первоначальная проблема заключалась в том, что после того, как пользователь выбрал позицию, я хотел нарисовать круг.Однако мои наложения не отображаются, пока регион карты не изменился.Я пытался нарисовать эти круги сразу.И самое удобное для пользователя решение, которое я нашел, установить центр mapView в центр наложения.

self.mapView.setCenter(origin, animated: false)

Таким образом, после того, как пользователь выберет позицию, сразу же сфокусируйтесь на этой позиции и отобразятся наложения.

0 голосов
/ 20 февраля 2019

Попробуйте инкапсулировать их в dsipatchQueue.main

DispatchQueue.main.async {
self.mapView.setRegion(mapView.region, animated: true)
}
...