Как добавить круг вокруг булавки карты в Swift? - PullRequest
1 голос
/ 24 января 2020

Я пытался понять это без удачи.

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

  • Показать текущее местоположение пользователя
  • Показать пин-код, где я хочу (в зависимости от широты и долготы)

Что я не могу понять:

Как создать круг с геозоной вокруг этого места?

 func setupData() {
    // 1. check if system can monitor regions
    if CLLocationManager.isMonitoringAvailable(for: 
 CLCircularRegion.self) {

        // 2. region data
        let title = "Marina Bar Hop"
        let coordinate = CLLocationCoordinate2DMake(33.97823607957177, -118.43823725357653)
        let regionRadius = 300.0

        // 3. setup region
        let region = CLCircularRegion(center: CLLocationCoordinate2D(latitude: coordinate.latitude,
            longitude: coordinate.longitude), radius: regionRadius, identifier: title)
        locationManager.startMonitoring(for: region)

        // 4. setup annotation
        let restaurantAnnotation = MKPointAnnotation()
        restaurantAnnotation.coordinate = coordinate;
        restaurantAnnotation.title = "\(title)";
        mapView.addAnnotation(restaurantAnnotation)

        // 5. setup circle
        let circle = MKCircle(center: coordinate, radius: regionRadius)
        mapView.addOverlay(circle)
    }
    else {
        print("System can't track regions")
    }
}

// 6. draw circle
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    let circleRenderer = MKCircleRenderer(overlay: overlay)
    circleRenderer.strokeColor = UIColor.red
    circleRenderer.lineWidth = 1.0
    return circleRenderer
} 

Смотрите " нарисовать круг "и" установить круг "^

В случае, если есть ошибка, которую я не вижу, остальной код - здесь .

Любая помощь с благодарностью Я думал, что сделал все, чтобы решить эту проблему, но она все равно не сработает. :( Заранее спасибо!

1 Ответ

1 голос
/ 25 января 2020

Проблема с этим вопросом состоит в том, что код в вопросе не точно отражает реальный код. К счастью, вы также разместили реальный код:

https://github.com/kcapretta/RadiusSocialNetworkingApp/blob/master/RadiusMap/RadiusLocationViewController

В этой версии кода, мы ясно видим, что ваш метод делегата

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay)
     -> MKOverlayRenderer {

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

Чтобы продемонстрировать, вот небольшой вариант вашего кода, оставляя ненужные вещи о регионе мониторинг и текущее местоположение пользователя и концентрация только на аннотации и наложении круга:

class ViewController: UIViewController, MKMapViewDelegate {

    @IBOutlet var mapView : MKMapView!
    let coordinate = CLLocationCoordinate2DMake(33.97823607957177, -118.43823725357653)
    // this is a _method_
    override func viewDidLoad() {
        super.viewDidLoad()
        mapView.delegate = self

        mapView.region = MKCoordinateRegion(center: coordinate, latitudinalMeters: 1000, longitudinalMeters: 1000)

        let title = "Marina Bar Hop"
        let restaurantAnnotation = MKPointAnnotation()
        restaurantAnnotation.coordinate = coordinate
        restaurantAnnotation.title = title
        mapView.addAnnotation(restaurantAnnotation)

        let regionRadius = 300.0
        let circle = MKCircle(center: coordinate, radius: regionRadius)
        mapView.addOverlay(circle)
    }
    // this is a _method_
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        let circleRenderer = MKCircleRenderer(overlay: overlay)
        circleRenderer.strokeColor = UIColor.red
        circleRenderer.lineWidth = 1.0
        return circleRenderer
    }
}

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...