контакты не отображаются в mapView.Swift 5 - PullRequest
0 голосов
/ 19 сентября 2019

Мне нужно отобразить булавки (аннотации) на карте.Затем нарисуйте многоугольные линии от булавки к булавке (аннотация к аннотации)

Я получаю массив двойных чисел, которые я конвертирую в CLLocationCoordiante2D.первые значения lat и long всегда равны 0.0, поэтому я удаляю их из массива, потому что там не возникает проблем.

Я сопоставляю двойники с координатами и добавляю их в mapView

Я также включил функцию viewFor, и мне показалось, что она мне на самом деле не нужна?

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

Кроме того, меня не волнуют имена, я просто хочу, чтобы контакты появились.

Я попытался установить одну координату ипо-прежнему нет булавки.

Делегат mapView правильно установлен в viewDidLoad ()

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

func createAnnotations() {
    latitude.remove(at: 0)
    longitude.remove(at: 0)

   let coordinates = zip(latitude, longitude).map(CLLocationCoordinate2D.init)

    AppLogger.logInfo("\(coordinates)")

   let annotations = zip(coordinates, names)
       .map { (coordinate, name) -> MKPointAnnotation in
           let annotation = MKPointAnnotation()

           annotation.coordinate = coordinate
           annotation.title = name

           return annotation
       }

   mapView.addAnnotations(annotations)
   mapView.showAnnotations(annotations, animated: true)
}


func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    guard annotation is MKPointAnnotation else { return nil }

    let identifier = "Annotation"
    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)

    if annotationView == nil {
        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
        annotationView!.canShowCallout = true
    } else {
        annotationView!.annotation = annotation
    }
    return annotationView
}

[__ C.CLLocationCoordinate2D (широта: 41.89454659591164, долгота: -87.67463844121563), __C.CLLocationCoordinate2D (широта: 41.89424383424124, долгота: -87.67461071330482))]

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

1 Ответ

0 голосов
/ 19 сентября 2019

Вы правы, что вам не нужно viewFor, если вы регистрируете аннотацию для своей аннотации, например,

mapView.register(MKPinAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier))

Но давайте отложим это на мгновение.Давайте сосредоточимся на том, чтобы аннотация не появлялась.Есть две возможности:

  1. Убедитесь, что вы действительно добавляете координаты.

    Вы печатаете coordinates.Попробуйте напечатать annotations.Т.е., давайте удостоверимся, что имена не были пустыми и поэтому аннотации были пустыми.Если вы zip / map не пустой массив с пустым, окончательный результат будет пустым.(Он сокращен до минимальной длины массива.)

  2. Убедитесь, что вам viewFor вообще звонят.

    Предполагая, что вы исправили первую проблему, попробуйтедобавив точку останова или инструкцию log в viewFor и убедитесь, что она вызывается.Например, убедитесь, что вы задали делегат вида карты и т. Д.

...