Question: Ok, I have looked at a ton of other posts however my approach is not working. I have a series of images (2-7.png) that I am trying to animate in in succession with a delay between each. To do this I have:

```
 for i in 2...7
            {
                        //code that runs after the transition is complete here
                        var bubView = UIImageView(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
                        bubView.image = UIImage(named: "\(i).png")
                        //bubView.backgroundColor = UIColor.black
                        bubView.center = CGPoint(x: bubView.center.x, y: self.bounds.height * 0.69)
                        self.addSubview(bubView)

                        UIView.animate(withDuration: 0.4, delay: 2.0, usingSpringWithDamping:
                            0.6, initialSpringVelocity: 1.25, options: [], animations: {
                                //thing being animated
                                bubView.frame = CGRect(x: 0, y: 0, width: self.screenSize.width, height: self.screenSize.width)
                               bubView.center = CGPoint(x: bubView.center.x, y: self.bounds.height * 0.69)

                        }, completion: { finished in

                            })

        }

```

I have also tried not having a delay in the animation and just sticking a delay at the start of for loop, however with this all the images animate in at once. They are ALL delayed 2s, then they all come in.

How can I delay each one individually?

Answer: 
You're giving all of them the same animation, so they're all happening at the same time. If you want them to animate separately, try this:

Set the delay: to 2.0\*Double(i)
You set all your animation at the same time. To achieve what you want you can either set a delay depending on `i` as mentioned by Gaston or creating a recursive func 

```
func animateView(startWithView : Int = 2) {
  //code that runs after the transition is complete here
  var bubView = UIImageView(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
  bubView.image = UIImage(named: "\(startWithView).png")
  //bubView.backgroundColor = UIColor.black
  bubView.center = CGPoint(x: bubView.center.x, y: self.bounds.height * 0.69)
  self.addSubview(bubView)

UIView.animate(withDuration: 0.4, delay: 2.0, usingSpringWithDamping:
    0.6, initialSpringVelocity: 1.25, options: [], animations: {
        //thing being animated
        bubView.frame = CGRect(x: 0, y: 0, width: self.screenSize.width, height: self.screenSize.width)
        bubView.center = CGPoint(x: bubView.center.x, y: self.bounds.height * 0.69)

}, completion: { finished in
    if startWithView < 7 {
        animateView(startWithView: startWithView + 1)
    }
})
}

```

Then call

```
animateView()

```

Consider to change the inputs, to make it more reusable.
I'd go with this solution but Gaston's one is easier to implement.