2017-03-11 9 views
0

UIViewUIButton/UILabelをアニメーションしたいです。たとえば、すべてのUIButtonが1つのコード行で1つずつフェードインします。これは可能ですか? Githubを検索しましたが、何も見つかりませんでした。私は毎回UILabelまたはUIButtonを一つずつアニメーション化する作業がたくさんあることが分かります。ありがとうございました。1つのUIViewにすべての要素をアニメ化

答えて

1

UIViewのサブビューを繰り返して、それがUILabelまたはUIButtonであるかどうかを確認することで、自分で行うことができます。

var counter : Double = 0 

func hideSubviews(view:UIView){ 

    for tempView in view.subviews{ 

     let when = DispatchTime.now() + counter 

     if tempView is UIButton || tempView is UILabel{ 

      DispatchQueue.main.asyncAfter(deadline: when) { 

       UIView.animate(withDuration: 1, animations: { 
        //this does fade out, change 0 to 1 for fade in 
        tempView.alpha = 0.0 
       }) 
      } 
     } 
     //increment by gap you want 
     counter += 1 
    } 
} 

編集

var counter = 0 

func hideSubviews(view:UIView){ 

    for tempView in view.subviews{ 

     if tempView is UIButton || tempView is UILabel{ 

      UIView.animate(withDuration: 0.3, delay: TimeInterval(counter), options: .init(rawValue: 0), animations: { 

       tempView.alpha = 0.0 

      }, completion: nil) 
     } 

     counter += 1 
    } 
} 

そして:私はこのはるかに簡単な方法を忘れてしまった

ため息は、あなたがアニメーション機能の遅延プロパティを使用することができるような何かをviewDidAppearのどこかで、関数を呼び出してビューを渡すだけです。

override func viewDidAppear(_ animated: Bool) { 

    super.viewDidAppear(animated) 

    hideSubviews(view: view) 
} 
+0

をすごいO、私はそれだけで最初の配列でそれらを配置することなく、すべてのUILabelとUIButtonを取ることが大好きです。ありがとうございます – NoKey

1

あなたが探しているコードの1行としてファンクションを作成して呼び出すことができます。ここでは、フェードインしたいボタンやラベルの配列を追加します。作業。あなたがする必要があるのは、ストーリーボードでUIButtonのアウトレットを接続することだけです。

import UIKit 

class ViewController: UIViewController { 

@IBOutlet weak var button1: UIButton! 

@IBOutlet weak var button2: UIButton! 

@IBOutlet weak var button3: UIButton! 

var count = 0 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

override func viewDidAppear(_ animated: Bool) { 

    let allButtons = [button1, button2, button3] 

    fadeInButtons(buttons: allButtons as! [UIButton]) 

} 

func fadeInButtons(buttons: [UIButton]) { 

    UIView.animate(withDuration: 0.4, animations: { 

      buttons[self.count].alpha = 0 


    }) { (value) in 

     if self.count < buttons.count - 1 { 

      self.count += 1 

      self.fadeInButtons(buttons: buttons) 

     } 

     } 





} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


} 

ボタンとあなたのストーリーボードがこの

Storyboard

ようになっているはずですので、あなたがする必要があるすべては、関数fadeInButtons(ボタン:[UIButton])を呼び出すで、それにの配列を渡しますボタンを使用して、次々とそれを行います。これを変更して、func fadeInButtonsというラベルを含めることもできます(ボタン:[UIButton]、ラベル:[UILabel])。各アニメーションの時間を変更することができます。この例では、アニメーションのフェードインは0.4秒で完了します。

2
let duration = 0.5 

view.subviews.flatMap { $0 as? UILabel ?? $0 as? UIButton }.enumerated().forEach { i, o in UIView.animate(withDuration: duration, delay: Double(i) * duration, animations: { o.alpha = 0 }) } 

"one"行にあります。私はいくつかのエラーのplsはそれらを修正すること自由に感じましたので、もし

は自分の携帯電話上でこれを型付き:)

+0

うわー:)私はこれを将来的に使う、ありがとう! – NoKey

+0

素敵な鎖:)前に期間を設定する理由はありますか? – silentBob

+0

唯一の理由は、継続時間を変更したい場合、遅延について心配する必要はありません。 – Eendje

関連する問題