Я пытаюсь добавить импульсную анимацию в AnnotationView на карте. Я хочу, чтобы анимация запускалась, когда аннотация помещалась на карту, и продолжалась до тех пор, пока пользователь не покинет геозону.
Я попытался разместить анимацию там, где я создаю аннотацию, и в методе делегирования viewFor аннотации. Я также попытался добавить анимацию в слой annotationView и слой mapView.
Я попытался центрировать анимацию в annotationView.center, но результат немного случайный. Ниже, ближе всего, я получил, метод вызывается в делегате didUpdatelocations, если пользователь находится на расстоянии менее 600 футов от геозоны.
Я также прошел через код, чтобы убедиться, что вся информация о широте и долготе верна и не возвращает 0.
// MARK: - SET UP ANNOTATIONS FOR MAP
func addHapsToMapView(mapView: MKMapView, manager: CLLocationManager) {
for haps in Haps.shared.hapArray {
guard let managerCoordinates: CLLocationCoordinate2D = manager.location?.coordinate else { return }
let userLocation: CLLocation = CLLocation(latitude: managerCoordinates.latitude, longitude: managerCoordinates.longitude)
let hapLocation = CLLocation(latitude: haps.latitude ?? 0, longitude: haps.longitude ?? 0)
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2D(latitude: haps.latitude ?? 0, longitude: haps.longitude ?? 0)
annotation.title = haps.title
if userLocation.distance(from: hapLocation) < 600 && checkAnnotations(annotation: annotation, mapView: mapView) {
let point = mapView.convert(annotation.coordinate, toPointTo: mapView)
let pulse = PulseAnimation(numberOfPulse: 15, radius: 50.0, position: point)
pulse.animationDuration = 1.0
pulse.backgroundColor = UIColor(rgb: 0xff550a).cgColor
mapView.addAnnotation(annotation)
mapView.layer.insertSublayer(pulse, above: mapView.layer)
}
}
}
Ожидаемые результаты должны иметь анимацию по центру аннотации и цикл до тех пор, пока пользователь не выйдет из геозоны. В этот момент я хочу, чтобы аннотация и анимация пульса исчезли вместе.
Проблема, с которой я сталкиваюсь, заключается в том, что анимация иногда размещается где-то случайным образом или заканчивается, как только пользователь входит в геозону или после того, как он покидает геозону и аннотации удаляются, анимация все еще там анимируется немного раньше исчезающий.