Добавление анимации пульса в MKAnnotationView для Swift - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь добавить импульсную анимацию в 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)
        }
    }
}

Ожидаемые результаты должны иметь анимацию по центру аннотации и цикл до тех пор, пока пользователь не выйдет из геозоны. В этот момент я хочу, чтобы аннотация и анимация пульса исчезли вместе.

Проблема, с которой я сталкиваюсь, заключается в том, что анимация иногда размещается где-то случайным образом или заканчивается, как только пользователь входит в геозону или после того, как он покидает геозону и аннотации удаляются, анимация все еще там анимируется немного раньше исчезающий.

...