Adding Image Transition Animation in Swift

Below is the code that automatically transitions between different images, every 5 seconds. I want to add animations to the transitions i.e. fade, scroll from left, etc. How would I go about doing this in Swift? Thanks.

class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()

    imageView.animationImages = [
        UIImage(named: "brooklyn-bridge.jpg")!,
        UIImage(named: "grand-central-terminal.jpg")!,
        UIImage(named: "new-york-city.jpg")!,
        UIImage(named: "one-world-trade-center.jpg")!,
        UIImage(named: "rain.jpg")!,
        UIImage(named: "wall-street.jpg")!]

    imageView.animationDuration = 25.0
    imageView.startAnimating()
}

  • Fill NSMutableArray in a for loop
  • Can AVFoundation be coerced into playing a local .ts file?
  • How to check iOS app size before upload
  • How to POST an object to rails using RestKit?
  • iOS App crashes when deployed to device
  • iOS Localization: Unicode character escape sequences, which have the form '\uxxxx' does not work
  • 3 Solutions Collect From Internet About “Adding Image Transition Animation in Swift”

    class ViewController: UIViewController {
            @IBOutlet weak var imageView: UIImageView!
    
            let images = [
                    UIImage(named: "brooklyn-bridge.jpg")!,
                    UIImage(named: "grand-central-terminal.jpg")!,
                    UIImage(named: "new-york-city.jpg"),
                    UIImage(named: "one-world-trade-center.jpg")!,
                    UIImage(named: "rain.jpg")!,
                    UIImage(named: "wall-street.jpg")!]
            var index = 0
            let animationDuration: NSTimeInterval = 0.25
            let switchingInterval: NSTimeInterval = 3
    
            override func viewDidLoad() {
                    super.viewDidLoad()
    
                    imageView.image = images[index++]
                    animateImageView()
            }
    
            func animateImageView() {
                    CATransaction.begin()
    
                    CATransaction.setAnimationDuration(animationDuration)
                    CATransaction.setCompletionBlock {
                            let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(self.switchingInterval * NSTimeInterval(NSEC_PER_SEC)))
                            dispatch_after(delay, dispatch_get_main_queue()) {
                                    self.animateImageView()
                            }
                    }
    
                    let transition = CATransition()
                    transition.type = kCATransitionFade
                    /*
                    transition.type = kCATransitionPush
                    transition.subtype = kCATransitionFromRight
                    */
                    imageView.layer.addAnimation(transition, forKey: kCATransition)
                    imageView.image = images[index]
    
                    CATransaction.commit()
    
                    index = index < images.count - 1 ? index + 1 : 0
            }
    }
    

    Implement it as a custom image view would be better.

    Here is a standalone class you can use to animate image change with fade animation.

    class FadeImageView: UIImageView
    {    
        @IBInspectable
        var fadeDuration: Double = 0.13
    
        override var image: UIImage? 
        {
            get {
                return super.image
            }
            set(newImage) 
            {
                if let img = newImage 
                {
                    CATransaction.begin()
                    CATransaction.setAnimationDuration(self.fadeDuration)
    
                    let transition = CATransition()
                    transition.type = kCATransitionFade
    
                    super.layer.add(transition, forKey: kCATransition)
                    super.image = img
    
                    CATransaction.commit()
                } 
                else {
                    super.image = nil
                }
            }
        } 
    }
    

    animating code, based on this answer, in Swift 3

    let animationDuration: TimeInterval = 0.25
    let switchingInterval: TimeInterval = 3
    func animateImageView()
    {
        CATransaction.begin()
    
        CATransaction.setAnimationDuration(animationDuration)
        CATransaction.setCompletionBlock {
            DispatchQueue.main.asyncAfter(deadline: .now() + self.switchingInterval) {
                self.animateImageView()
            }
        }
    
        let transition = CATransition()
        transition.type = kCATransitionFade
        /*
         transition.type = kCATransitionPush
         transition.subtype = kCATransitionFromRight
         */
        imageView.layer.add(transition, forKey: kCATransition)
        imageView.image = images.object(at: index) as! UIImage
    
        CATransaction.commit()
    
        index = index < images.count - 1 ? index + 1 : 0
    }