Agregar animation de transición de image en Swift

A continuación se muestra el código que transita automáticamente entre diferentes imágenes, cada 5 segundos. Quiero agregar animaciones a las transiciones, es decir, desvanecerse, desplazarme desde la izquierda, etc. ¿Cómo haría esto en Swift? Gracias.

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() } 

 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 } } 

Implementarlo como una vista de image personalizada sería mejor.

Aquí hay una class independiente que puede usar para animar el cambio de image con la animation de desvanecimiento.

 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 } } } } 

Código de animation, basado en esta respuesta , en 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 }