如何在Swift中的同一个UILabel中淡入和淡出不同的文本?

时间:2016-11-09 02:38:51

标签: ios swift uilabel swift3 animatewithduration

目前我的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,但我不确定如何正确使用它。

3 个答案:

答案 0 :(得分:2)

您可以在标签上设置文字设置,例如

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

答案 1 :(得分: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")

尚未对它进行测试,因此可能需要进行一些调整,但我已经使用过这样的东西来淡出和淡出某些内容

答案 2 :(得分:0)

几天后,我尝试了几种方法,而我发现的最佳解决方案是:https://medium.com/ios-os-x-development/swift-3-so-i-wanted-to-animate-a-label-14dd2b332ef9

必须更改变量和函数以适应Hello.class类型而不是String类型。我使用的是字符串数组(如此处的问题),所以我在第131行的Int之后增加了一个索引。