2016-07-07 3 views
0

必要なもの:Viewcontrollerが呼び出された後、バックグラウンドを除き、このViewController内のすべての要素をフェードインします。背景は残っていなければなりません。アルファベットを1.0に戻した後、ボタン/ラベル/何も表示されません。

何がうまくいかない:私のコードに見られるように、フェードインするものについては、最初に削除する必要があります。除去部分はすばらしいことです。しかし、私がそれを再出現させたいとき、何も起こらない。印刷機能を使用してランダムラベルのアルファを見ると、1.0に設定されます。私は何が間違っているのか分かりません。

これは私のコードです:

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) 
     } 
    } 

} 

答えて

0

私は、UIView.animateWithDurationが非同期に実行されていると言います。つまり、fadeIn()の機能は、removeEverything()のアニメーションが完了する前に実行されます。

UIView.animateWithDuration操作をRemoveeverything()から削除するだけです。 duration引数を0.0に設定したため、実際には変更されることはありません(コードは現在動作するはずです)

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) 
} 

コードスニペットは期待どおりに動作するはずです。配列のfilter関数を使用し、コードを読みやすくするために不要なキャストを削除しました。それが役に立てば幸い!

+0

これは確かに、コードをきれいにするのに役立ちます、ありがとう!それ以外は秒が上がった後に消えるだけです。 (ここでの秒は1.0と0.7です)私は10秒でテストしました。フェードインし、10秒以内に自動的にフェードアウトします。間違ったアニメーションを使用していますか? – Nahaku

+0

それは今、私はいくつかの画像が動作していないと思う...うまくありがとう! – Nahaku

0

だけの思考は、あなたが0.01のような、むしろそれらを完全に削除するよりもunrecognizably低いものにアルファを設定しようとしましたか?また、ボタンの色をバックグラウンドに合わせてから、フェードバックしてみることもできます。

またself.background.alphaあるいはまた

view.background.alpha、あなたべき本当にキャメルケースあなたの関数名をコールする必要があるかもしれません。

関連する問題