J'ai un UIImageView avec une animation et, dans l'UIView, j'applique un effet de fondu, mais je dois appliquer un fondu sortant lorsque le UIImageView, qui est animé, est touché.
C'est ce que je fais pour disparaître.
UIView.animateWithDuration(0.5, delay: delay,
options: UIViewAnimationOptions.CurveEaseOut, animations: {
uiImageView.alpha = 1.0
}
Voici ce que je ferais sur la base de mes recherches: (en supposant que vous utilisez un storyboard)
Accédez à votre UIImageView et sous les attributs, cochez la case "User Interaction Enabled".
Faites glisser un TapGestureRecognizer en haut de la vue de l'image.
Contrôlez le clic sur le geste du robinet et faites-le glisser pour effectuer une action sur votre ViewControler.Swift.
Ajoutez le code suivant à l'intérieur:
UIView.animate(withDuration: 0.5, delay: 0.5, options: .curveEaseOut, animations: {
self.uiImageView.alpha = 0.0
}, completion: nil)
Alors vous avez terminé!
À partir d'iOS 10 Apple a lancé un nouveau iOS Animations SDK qui est beaucoup plus puissant, en particulier en ce qui concerne les fonctions de synchronisation et l'interactivité.
L'évanouissement du code avec cette approche:
UIViewPropertyAnimator(duration: 0.5, curve: .easeOut, animations: {
self.uiImageView.alpha = 0.0
}).startAnimation()
Pour obtenir plus de détails sur Property Animator, jetez un œil à Démo iOS 10 Animations .
Swift 4. Ajoutez la fonction de fondu d'entrée et de sortie à l'objet UIView
extension UIView {
func fadeIn(_ duration: TimeInterval = 0.5, delay: TimeInterval = 0.0, completion: @escaping ((Bool) -> Void) = {(finished: Bool) -> Void in}) {
UIView.animate(withDuration: duration, delay: delay, options: UIViewAnimationOptions.curveEaseIn, animations: {
self.alpha = 1.0
}, completion: completion) }
func fadeOut(_ duration: TimeInterval = 0.5, delay: TimeInterval = 1.0, completion: @escaping (Bool) -> Void = {(finished: Bool) -> Void in}) {
UIView.animate(withDuration: duration, delay: delay, options: UIViewAnimationOptions.curveEaseIn, animations: {
self.alpha = 0.3
}, completion: completion)
}
}
Exemple
label.fadeIn()
label.fadeOut()
imageView.fadeOut(completion: {
(finished: Bool) -> Void in
imageView.removeFromSuperview()
})
label.fadeIn(completion: {
(finished: Bool) -> Void in
label.text = "Changed!"
})
Swift 5
Cela a bien fonctionné pour moi. Je voulais animer un label avec un fondu entrant/sortant continu. J'ai placé l'étiquette à l'intérieur du "cardHeaderView".
@IBOutlet weak var cardHeaderView: UIView!
Placez-le dans le "viewDidAppear". Je suis parti avec un retard de zéro pour que l'animation commence tout de suite.
fadeViewInThenOut(view: cardHeaderView, delay: 0)
Voici la fonction.
func fadeViewInThenOut(view : UIView, delay: TimeInterval) {
let animationDuration = 1.5
UIView.animate(withDuration: animationDuration, delay: delay, options: [UIView.AnimationOptions.autoreverse, UIView.AnimationOptions.repeat], animations: {
view.alpha = 0
}, completion: nil)
}