2016-10-29 4 views
1

ボタンを押すと、ラベル付きのビューが表示されます。次に、ラベルが消えて、ラベルが別のテキストで再表示されるたびに5回(アニメーション付きで)表示されます。 UILabelをアニメーション化してテキストを変更するためのコードを取得できないようです。私はこれを試しました。しかし、ボタンを押すと、ループとアニメーションが即座に発生します。UILabelを5回表示して消滅させるにはどうすればよいですか?

持続時間は以下である:0.3、0.6、0.9、1.2、あなたがdurationを変更するが、0としてdelayを残している1.5

for i in 1...5 { 

      infoViewMsgLbl.text = randomReward(real: i) // This retrives a String 

      UIView.animate(withDuration: ((1.5/5)*Double(i)), delay: 0.0, options: .allowAnimatedContent, animations: { 
       self.infoViewMsgLbl.alpha = 0 
      }, completion: { finished in 
       UIView.animate(withDuration: ((1.5/5)*Double(i)), animations: { 
        self.infoViewMsgLbl.alpha = 1 
       }) 
      }) 

      print("in the loop: ", i) 
     } 
+0

関連するコードで質問を更新し、コードで発生している問題を明確に説明してください。 – rmaddy

+0

@rmaddy質問を更新しました。 – james

答えて

1

(即ちすぐに開始します)。このような場合は、逆の方法でdelayを変更し、durationを変更しないでください。

しかし、あなたはラベル textを変更することを考えると、私の代わりにタイマーを使用することがあります:

var index = 1 
Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { [weak self] timer in 
    self?.infoViewMsgLbl.alpha = 0 
    self?.infoViewMsgLbl.text = self?.randomReward(real: index) 
    index += 1 
    if index > 5 { timer.invalidate() } 
    UIView.animate(withDuration: 0.3) { 
     self?.infoViewMsgLbl.alpha = 1 
    } 
} 
+0

完璧に動作し、タイマーを使用して考えていなかった、ありがとう。 – james

1

たぶん、このような何か:

func animate(alpha: CGFloat, start: Int, end: Int) { 

    infoViewMsgLbl.text = randomReward(real: Int(start/2)) // This retrives a String 

    UIView.animate(withDuration: 0.3, animations: { 
     self.infoViewMsgLbl.alpha = alpha 
    }, completion: { success in 

     if start + 1 <= end { 
      self.animate(alpha: alpha == 1.0 ? 0.0 : 1.0, start: start + 1, end: end) 
     } 
    }) 
} 

使用法:

animate(alpha:0.0, start: 0, end: 10) //would flash a total of 5 times 

各追加0.3秒まで次のループを呼び出さないので、持続時間は0.3のままであることに注意してくださいオンドは過ぎ去った。

+0

この機能は機能します。ただし、終了するとラベルはアルファ= 0のままになります。 – james

+0

11回実行できます。しかし、私はロブのタイマーの実装はおそらくこれを解決するためのよりよい方法であることに同意します。 – Frankie

関連する問題