March 4, 2020

Animate image change with Swift

Animate image change with Swift

Animating an image change with Swift is quite simple, all we need to do is use UIView.transition.

To do this I have created a new project and added a UIImageView to my Main.storyboard. I then created outlets to my ViewController for the UIImageView.

The next thing I done was add two images to my Assets.xcassets. These images are named image1 and image2 which you will see in the code. You can find these images here - image1, image2.

This is my full source code for my ViewController:

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.imageView.image = UIImage(imageLiteralResourceName: "image1")
        
        // Do any additional setup after loading the view.
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        UIView.transition(with: self.imageView,
                          duration: 2.0,
                          options: .transitionCrossDissolve,
                          animations: {
                            self.imageView.image = UIImage(imageLiteralResourceName: "image2")
        }, completion: nil)
    }
}

As you can see, in the viewDidLoad I set self.imageView.image to image1 and then in viewDidAppear I used UIView.transition in order to cross dissolve from image1 to image2.

The duration is set to 2 which means that it will take 2 seconds to complete the animation. For the animations argument we use a closure, in this closure we will set the image to image2.

Looking at the code above you will notice that I have put this code in the viewDidAppear method, this is because it does not work in viewDidLoad by default.

You should not put it in the viewDidLoad because this is when the view has been loaded but not yet displayed. Make sure you call the animations once the view has been displayed.

You can find the full project here.