2016-07-07 2 views
0

Ce que je veux: Après l'appel du Viewcontroller, je veux fondre tous mes éléments dans ce Viewcontroller, sauf pour l'arrière-plan. L'arrière-plan doit rester. Ce qui ne va pas: Comme vous pouvez le voir dans mon code, pour que quelque chose disparaisse, il faut d'abord le supprimer. La partie remove fonctionne très bien. Mais quand je veux que ça ressurgisse, rien ne se passe. Lorsque j'utilise la fonction d'impression pour voir l'alpha d'une étiquette aléatoire, elle est définie sur 1.0. Je ne peux pas comprendre ce que je fais mal.Aucun bouton/étiquette/rien ne réapparaîtra après avoir redéfini l'alpha à 1.0

Voici mon code:

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    Removeeverything() 
    Fadein() 
} 

func Removeeverything() { 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UIButton { 
      UIView.animateWithDuration(0.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: { 

       btn.alpha = 0.0 

       }, completion: nil) 
     } 
    } 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UILabel { 
      UIView.animateWithDuration(0.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: { 

       btn.alpha = 0.0 

       }, completion: nil) 
     } 
    } 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UIImageView { 
      UIView.animateWithDuration(0.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: { 

       btn.alpha = 0.0 

       }, completion: nil) 
     } 
    } 
} 

func Fadein() { 
    Backgrond.alpha = 1.0 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UIButton { 
      UIView.animateWithDuration(1.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: { 

       btn.alpha = 1.0 

       }, completion: nil) 
     } 
    } 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UILabel { 
      UIView.animateWithDuration(1.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: { 

       btn.alpha = 1.0 

       }, completion: nil) 
     } 
    } 
    for view in self.view.subviews as [UIView] { 
     if let btn = view as? UIImageView { 
      UIView.animateWithDuration(0.7, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: { 

       btn.alpha = 1.0 

       }, completion: nil) 
     } 
    } 

} 

Répondre

0

Je dirais que le problème est que UIView.animateWithDuration est exécuté asynchrone (c'est-à-dire que votre fonction fadeIn() s'exécutera avant que les animations en removeEverything() soient terminées).

Supprimez simplement les opérations UIView.animateWithDuration de votre Removeeverything(). Étant donné que vous avez défini l'argument de la durée de 0,0 ne va vraiment changer (sauf que le code devrait maintenant fonctionner)

func removeEverything() { 
    for v in view.subviews.filter({ $0 is UIButton || $0 is UILabel || $0 is UIImageView }) { 
     v.alpha = 0 
    } 
} 

func fadeIn() { 
    // Background.alpha = 1.0 
    UIView.animateWithDuration(1.0, delay: 0, options: .CurveEaseIn, animations: { 
     for v in view.subviews.filter({ $0 is UIButton || $0 is UILabel }) { 
      v.alpha = 1 
     } 
    }, completion: nil) 
    UIView.animateWithDuration(0.7, delay: 0, options: .CurveEaseIn, animations: { 
     for v in view.subviews.filter({ $0 is UIImageView }) { 
      v.alpha = 1 
     } 
    }, completion: nil) 
} 

Ce fragment de code devrait fonctionner comme prévu. J'ai utilisé la fonction filter sur la matrice et me suis débarrassé de quelques moulages inutiles pour rendre le code plus lisible. J'espère que cela aide!

+0

Cela aide sûrement à nettoyer le code, merci! Sauf, il va juste disparaître, après les secondes sont en hausse. (Où les secondes sont maintenant 1.0 et 0.7.) Je l'ai testé avec 10 secondes. Il va s'estomper et disparaître automatiquement dans les 10 secondes. Utilisons-nous la mauvaise animation? – Nahaku

+0

Cela fonctionne maintenant, je pense que certaines images ne fonctionnaient pas ... merci beaucoup! – Nahaku

0

Juste une pensée, vous avez essayé de placer l'alpha à quelque chose comme méconnaissable faible 0.01 plutôt que de les supprimer entièrement? Vous pouvez également essayer de faire correspondre la couleur du bouton à l'arrière-plan, puis de l'atténuer de cette façon.

Vous pouvez aussi avoir besoin d'appeler self.background.alpha ou view.background.alpha

De plus, vous devriez vraiment chameau cas vos noms de fonction.