   
   open func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
     TKUIMapManagerHelper.adjustZOrder(views)
+
+    let animatedIDs = animatedAnnotations.identities
+    let viewsToAnimate = views.filter {
+      guard let identity = ($0.annotation as? TKUIIdentifiableAnnotation)?.identity else { return false }
+      return animatedIDs.contains(identity)
+    }
+    for view in viewsToAnimate {
+      view.alpha = 0
+      let delay = TimeInterval((0...5).randomElement() ?? 0) / 10
+      UIView.animate(
+        withDuration: 0.25, delay: delay, options: [],
+        animations: {
+          view.alpha = 1
+        }, completion: nil
+      )
+    }
   }
   
   open func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

#else
  import TripKit
#endif

open class TKUIMapManager: TGMapManager {
  

    mapView?.removeOverlay(polygon)
  }
  
}

// MARK: - Updating animated annotations

fileprivate extension Array where Element: MKAnnotation {
  fileprivate var identities: [String] {
    return compactMap { ($0 as? TKUIIdentifiableAnnotation)?.identity }
  }
  
  fileprivate func elements(notIn other: [Element]) -> [Element] {
    let otherIDs = other.identities
    return filter {
      guard let id = ($0 as? TKUIIdentifiableAnnotation)?.identity else { return true }
      return !otherIDs.contains(id)
    }
  }
}

// MARK: - Updating dynamic annotations
