Vous trouverez ci-dessous le code qui effectue automatiquement la transition entre les différentes images, toutes les 5 secondes. Je veux ajouter des animations aux transitions, c'est-à-dire fondu, défilement de gauche, etc. Comment pourrais-je procéder dans Swift? Merci.
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
}
}
L'implémenter comme une vue d'image personnalisée serait préférable.
code d'animation, basé sur cette réponse , dans 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
}
Voici une classe autonome que vous pouvez utiliser pour animer le changement d'image avec une animation de fondu.
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
}
}
}
}