web-dev-qa-db-fra.com

Fondu entrant et fondu en animation Swift

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

Voici ce que je ferais sur la base de mes recherches: (en supposant que vous utilisez un storyboard)

  1. Accédez à votre UIImageView et sous les attributs, cochez la case "User Interaction Enabled".

  2. Faites glisser un TapGestureRecognizer en haut de la vue de l'image.

  3. Contrôlez le clic sur le geste du robinet et faites-le glisser pour effectuer une action sur votre ViewControler.Swift.

  4. 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é!

45
AntiStrike12

À 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 .

11
Olga Konoreva

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!"
})
10
August Lin

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)

}
1
Bill