Как сделать так, чтобы мои булавки падали на MKMapView с анимацией (и, возможно, медленнее, чем обычно)

У меня есть код, который отображает 10 пользовательских выводов на видимой части MKMapView:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    if !(annotation is MKPointAnnotation) {
        return nil
    }

    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "demo")
    if annotationView == nil {
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "demo")
        annotationView!.canShowCallout = true
    }
    else {
        annotationView!.annotation = annotation
    }

    annotationView!.image = UIImage(named: "OtherPin")
    return annotationView

} 

и функция для генерации случайных пинов:

func addPinsToMap(mapView: MKMapView, amount howMany:Int) {

//First we need to calculate the corners of the map so we get the points
    let nePoint:CGPoint = CGPoint(mapView.bounds.origin.x + mapView.bounds.size.width, mapView.bounds.origin.y);
    let swPoint:CGPoint = CGPoint((mapView.bounds.origin.x), (mapView.bounds.origin.y + mapView.bounds.size.height));

//Then transform those point into lat,lng values
    let neCoord:CLLocationCoordinate2D = mapView.convert(nePoint, toCoordinateFrom: mapView)
    let swCoord:CLLocationCoordinate2D = mapView.convert(swPoint, toCoordinateFrom: mapView)

// Loop
for _ in 0 ..< howMany {

    let latRange:Double = Double(self.randomBetweenNumbers(firstNum: CGFloat(neCoord.latitude), secondNum: CGFloat(swCoord.latitude)))
    let longRange:Double = Double(self.randomBetweenNumbers(firstNum: CGFloat(neCoord.longitude), secondNum: CGFloat(swCoord.longitude)))

// Add new waypoint to map
    let location:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latRange, longRange);

    let annotation = MKPointAnnotation()
    //let centerCoordinate = CLLocationCoordinate2D(latitude: 41, longitude:29)
    annotation.coordinate = location
    annotation.title = "Title"
    mapView.addAnnotation(annotation)

}//end

}//end

с помощью кода выше, когда пользователь открывает карту, он видит булавки, уже размещенные в некоторых случайных местах. У меня вопрос - как я могу сделать так, чтобы булавки падали один за другим, и, если возможно, я могу сделать так, чтобы они падали медленно, чтобы каждый штифт падал в течение 1-2 секунд вместо немедленного движения?

1 ответ

Решение

Есть свойство аннотации animatesDrop для анимации вы можете установить его так, как это

annotationView!.canShowCallout = true
annotationView!.animatesDrop = true

Проверьте это

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