Настройка выводов аннотаций
Я хотел бы настроить свои аннотации (булавки), чтобы иметь возможность изменить его изображение. Я использовал функцию (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