ios animation swift uiimage transition

ios - Agregar animación de transición de imagen en Swift



animation uiimage (3)

A continuación se muestra el código que automáticamente transiciones entre diferentes imágenes, cada 5 segundos. Quiero agregar animaciones a las transiciones, es decir, desvanecerme, desplazarme desde la izquierda, etc. ¿Cómo podría hacer 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 imagen personalizada sería mejor.


código de animación, 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 }


Aquí hay una clase independiente que puede usar para animar el cambio de imagen con la animación 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 } } } }