Настройка выводов аннотаций

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

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation is MKUserLocation {
        return nil
    }
    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "identifier")
        if annotationView == nil{
            annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "identifier")
            annotationView!.canShowCallout = true
            annotationView!.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)

            let pinImg = UIImage(named: "curz")
            let size = CGSize(width: 50, height: 50)
            UIGraphicsBeginImageContext(size)
            pinImg!.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
            let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            annotationView!.image = resizedImage
            }
    else {
    annotationView!.annotation = annotation
  }
return annotationView
}

2 ответа

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

Затем в mapview viewfor annotation вы можете проверить на annotation.identifier И назначьте правильное изображение.

Вы можете вернуть разные виды аннотаций для разных мест, сравнив информацию о координатах. например:

if ((annotation.coordinate.latitude == theCoordinate1.latitude) 
    && (annotation.coordinate.longitude == theCoordinate1.longitude))

{return someAnnotationView}

Перейдите по этой ссылке Добавление различных изображений в различные виды аннотаций в XCode

Другие вопросы по тегам