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

how can I fade in and out different texts on the same UILabel in Swift?

目前我的 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 
}

行得通,但每个文本突然消失并显示 - 有没有办法修改它以使每个文本 disappears/shows 流畅?我考虑过使用 animateWithDuration 并修改 alpha,但我不确定如何正确地进行。

可以试试这样的

    //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")

还没有测试过,所以可能需要一些调整,但我之前用过类似的东西来淡入淡出一些东西

您可以像这样在标签上设置动画设置文本

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

我在几天内尝试了几种变体,我找到的最佳解决方案是:https://medium.com/ios-os-x-development/swift-3-so-i-wanted-to-animate-a-label-14dd2b332ef9

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