let dispatchGroup = DispatchGroup()
for _ in 1...views.count { dispatchGroup.enter() }
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
for (index, view) in views.enumerated() {
view.alpha = initialAlpha
view.animate(animations: animations,
reversed: reversed,
initialAlpha: initialAlpha,
finalAlpha: finalAlpha,
delay: Double(index) * animationInterval,
duration: duration,
usingSpringWithDamping: dampingRatio,
initialSpringVelocity: velocity,
options: options,
completion: { dispatchGroup.leave() })
}
}
dispatchGroup.notify(queue: .main) {
completion?()
}