2016-11-09 11 views
0

は現在、私は私のswiftに文字列の配列を持っていると私はUILabelにループ内でそれらを表示しています:Swiftの同じUILabelで異なるテキストをフェードインまたはフェードインする方法はありますか?

動作しますが、それぞれのテキストが消えて、突然示し
let greetings = ["Test1", "Test2", "Test3", "Test4"] 

override func viewDidLoad(){ 
    super.viewDidLoad() 
    Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(TutorialEntryPoint.update), userInfo: nil, repeats: true) 
} 

var i = 0 
func update() { 
    if(i==4){ 
     i=0 
    } 
    myLabel.text = greetings[i] 
    i += 1 
} 

- それを修正する方法があります各テキストが消えたり、スムーズに表示されるようにしますか?私はanimateWithDurationを使用し、alphaを修正することを考えましたが、正しく行う方法がわかりません。

+0

'i'をチェックする代わりに、' greetings [i%greetings.count] 'を使うこともできます。 –

+0

@HennyLeeどういう意味ですか?申し訳ありません、ただ素早く学んでいます:) – user3766930

+1

'greetings [i%greetings.count] 'を使うと、範囲外であることを心配することなく' i'を増やすことができます。 '100%greetings.count'はあなたのケースでは' 0'と同じです。これは '%'がモジュロであるからです。結果は、分割時の剰余になります。たとえば、「5%3 = 2」は、5を3で割ったときの剰余を意味します。 –

答えて

2

の前にしてから何かをフェードインするために、このようなものを使用し、このような何かを試みることができます

UIView.transition(with: label, 
         duration: 0.25, 
         options: [.transitionCrossDissolve], 
         animations: { 
         label.text = "Your Text" 
}, completion: nil) 
1

//inside viewDidLoad 
    let animation = CAKeyframeAnimation() 
    animation.keyPath = "opacity" 
    animation.values = [0, 1, 1, 0] 
    animation.keyTimes = [0, 0.1, 0.9, 1] 
    animation.duration = 2.0 //same as your timer 
    animation.repeatCount = Float.infinity 

    myLabel.layer.addAnimation(animation, forKey: "fade") 

はそれをテストしていないので、いくつかの調整が必要になる場合がありますが、IVEはテキストを設定するアニメーション化することができます

関連する問題