swift — Mapkit изменяет pinTintColor в инструкции if else

#ios #swift #mapkit

#iOS #swift #mapkit

Вопрос:

Я пытаюсь изменить цвет вывода на основе переменной — цвет определенных выводов меняется, но это кажется случайным и не относится к цвету, который я ожидаю. Я подозреваю, что это как-то связано с dequeueReusableAnnotationView.Я пробовал без, но получил те же результаты. Есть идеи? Спасибо

 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 {
        let pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)

        pin.canShowCallout = true
        annotationView = pin

        if globalDataSet[counter].fields.numdocksavailable == 0 {

            print (counter,globalDataSet[counter].fields.numdocksavailable, globalDataSet[counter].fields.name)
            print ("pin.pinTintColor = UIColor.systemBlue")
            pin.pinTintColor = UIColor.systemBlue
            

        } else {
            print (counter,globalDataSet[counter].fields.numdocksavailable, globalDataSet[counter].fields.name)
            print ("pin.pinTintColor = UIColor.systemRed")
            pin.pinTintColor = UIColor.systemRed
            
        }
        
        counter  = 1

    } else {

        annotationView!.annotation = annotation
        
    }

    return annotationView
}
  

Ответ №1:

Попробуйте следующий код.

 if annotationView == nil {
    let pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)

    pin.canShowCallout = true
    annotationView = pin
    

} else {

    annotationView!.annotation = annotation
    
}

if globalDataSet[counter].fields.numdocksavailable == 0 {

    print (counter,globalDataSet[counter].fields.numdocksavailable, globalDataSet[counter].fields.name)
    print ("annotationView.pinTintColor = UIColor.systemBlue")
    annotationView.pinTintColor = UIColor.systemBlue
        

} else {
    print (counter,globalDataSet[counter].fields.numdocksavailable, globalDataSet[counter].fields.name)
    print ("annotationView.pinTintColor = UIColor.systemRed")
    annotationView.pinTintColor = UIColor.systemRed
        
}

counter  = 1
  

Комментарии:

1. привет — спасибо за ответ — к сожалению, это выдает мне значение ошибки типа annotationView, не имеет элемента pintintcolor и поэтому не выполняется сборка — мне удалось заставить его выполнить сборку, переместив «пусть pin = MKPinAnnotationView(аннотация: annotation, reuseIdentifier: identifier)» и изменив на pin.pinTintColor = но по-прежнему безуспешно.