2016-08-19 1 views
2

Voici mon code. L'effet de fondu fonctionne correctement. Le fondu en effet n'est toutefois pas animé. Je ne peux pas résoudre ce problème. Merci à tous ceux qui vont m'aider. Alpha est défini 0 dans storyboardL'animation FadeIn ne fonctionne pas swift 2

extension UIView { 

    func fadeIn(duration: NSTimeInterval = 3.0, delay: NSTimeInterval = 0.0, completion: ((Bool) -> Void) = {(finished: Bool) -> Void in}) { 
     UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveLinear, animations: { 
      self.alpha = 1.0 
      }, completion: completion) } 

    func fadeOut(duration: NSTimeInterval = 2.0, delay: NSTimeInterval = 3.0, completion: (Bool) -> Void = {(finished: Bool) -> Void in}) { 
     UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveEaseOut, animations: { 
      self.alpha = 0.0 
      }, completion: completion) 
    } 

} 
+0

ru essayer d'effectuer le fondu après le fondu sortant directement? – mtaweel

+0

pas fadeout après fadein –

Répondre

2

Si vous appelez UIView.animationWithDuration directement après l'appel, l'animation précédente sera annulée même si vous indiquez un délai dans l'appel de fonction. Cependant, vous pouvez utiliser la fonction d'achèvement comme @ Daniel Salle suggéré:

myView.fadeIn() { _ in 
    myView.fadeOut() 
} 

Ou si vous faites le fadeOut dans une autre méthode qui est déclenché par un événement exactement après fadeIn vous pouvez utiliser dispatch_after pour exécuter après un délai time (qui devrait être la durée de fadeIn dans votre cas)

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC))) 
dispatch_after(delayTime, dispatch_get_main_queue()) { 
    self.myView.fadeOut() 
} 
+0

Fadeout() remplacer fadein() dalay résoudre –

1

Votre code fonctionne bien pour moi dans un terrain de jeu:

import UIKit 
import XCPlayground 

extension UIView { 
    func fadeIn(duration: NSTimeInterval = 3.0, delay: NSTimeInterval = 0.0, completion: ((Bool) -> Void) = {(finished: Bool) -> Void in}) { 
     UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveLinear, animations: { 
      self.alpha = 1.0 
     }, completion: completion) 
    } 

    func fadeOut(duration: NSTimeInterval = 2.0, delay: NSTimeInterval = 3.0, completion: (Bool) -> Void = {(finished: Bool) -> Void in}) { 
     UIView.animateWithDuration(duration, delay: delay, options: UIViewAnimationOptions.CurveEaseOut, animations: { 
      self.alpha = 0.0 
     }, completion: completion) 
    } 
} 

let liveView = UIView(frame: CGRect(origin: CGPointZero, size: CGSize(width: 400, height: 400))) 
XCPlaygroundPage.currentPage.liveView = liveView 

let newView = UIView(frame: CGRect(x: 200, y: 200, width: 50, height: 50)) 
newView.backgroundColor = UIColor.greenColor() 
newView.alpha = 0 

liveView.addSubview(newView) 
newView.fadeIn { _ in newView.fadeOut{ _ in newView.fadeIn() } } 

Il apparaît en fondu, se fane à la fin du fondu-in, puis esquives dans le achèvement du fondu sortant.

Peut-être le problème où/quand vous appelez la méthode fadeIn() sur votre affichage, et pas un problème avec votre extension elle-même.

+0

Ce problème pourrait être là, appelez-le dans la fonction touchesBegan() avec ce code: mylabel.fadein(); mylabel.fadeout() –

+0

@LuigiFestinante Ah, c'est votre problème! Vous appelez 'fadeIn()' et appelez immédiatement 'fadeOut()'. Donc, il est logique que vous ne voyez pas le fondu dans animer et finir. Essayez ceci à la place: 'my label.fadein {_ in mylabel.fadeOut()}'. Cela passe la commande 'fadeOut()' dans le gestionnaire d'achèvement pour 'fadeIn()', au lieu de l'exécuter immédiatement. –

+0

Merci maintenant travailler –