(Это мой первый вопрос о переполнении стека, ха-ха)
ОБНОВЛЕНИЕ: По этой ссылке - Центр MKMapView ПЕРЕД отображением выноски
Однако я реализовал решение от Thermometerвыбор и отмена выбора аннотации заставляет ее выглядеть, как будто мое приложение глючит.
Я думаю, что лучшим способом было бы отложить появление callOut (всплывающих подробностей) на несколько секунд, чтобы у карты было время для перемещения в первую очередь.
Вот мой код:
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
guard let annotation = view.annotation else {
return
}
let currentAnnotation = view.annotation as? MapMarker
Global.currentAnnotation = currentAnnotation
findRelatinoshipLines()
if Global.showLifeStoryLines {
var locations = lifeStoryAnnotations.map { $0.coordinate }
let polyline = MKPolyline(coordinates: &locations, count: locations.count)
Global.finalLineColor = Global.lifeStoryColor
mapView.addOverlay(polyline)
}
if Global.showFatherLines {
var fatherLocations = fatherTreeAnnotations.map { $0.coordinate }
let fatherPolyline = MKPolyline(coordinates: &fatherLocations, count: fatherLocations.count)
Global.finalLineColor = Global.fatherLineageColor
mapView.addOverlay(fatherPolyline)
}
if Global.showMotherLines {
var motherLocations = motherTreeAnnotations.map { $0.coordinate }
let motherPolyline = MKPolyline(coordinates: &motherLocations, count: motherLocations.count)
Global.finalLineColor = Global.motherLineageColor
mapView.addOverlay(motherPolyline)
}
if Global.showSpouseLines {
var locations = spouseAnnotations.map { $0.coordinate }
let polyline = MKPolyline(coordinates: &locations, count: locations.count)
Global.finalLineColor = Global.spouseColor
mapView.addOverlay(polyline)
}
if Global.zoomChange == true {
Global.zoomChange = false
} else {
let currentRegion = mapView.region
let span = currentRegion.span
let location = currentAnnotation!.coordinate
let region = MKCoordinateRegion(center: location, span: span)
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
mapView.setCenter(annotation.coordinate, animated: true)
//mapView.setRegion(region, animated: true)
}
}
}
Продолжение:
В основном я работаю над приложением по семейной генеалогии, которое отображает события от родственников на карте.
Когда я щелкаю аннотацию (событие), выше появляется информация (кому принадлежит событие, где и когда и т. Д.) С информационной кнопкой, показывающей выбранного человека.
У меня настроена установка области MKMapView
, чтобы выбранная аннотация центрировалась при каждом нажатии новой аннотации.
Проблема в том, что когда я нажимаю на событие, которое находится на краю экрана, заголовок / описание моей аннотации всплывает по центру, так что оно помещается на моем экране, потому что не знает, что я планирую повторно-центрирование вида карты вокруг указанной аннотации.
Мне было интересно, есть ли способ заставить заголовок / описание отображаться по центру непосредственно над выбранной аннотацией, чтобы при перемещении карты все было по центру и помещалось на экране.
Вот несколько скриншотов того, о чем я говорю:
До и после