淡入淡出一串字符串

时间:2015-12-07 02:27:37

标签: ios swift label fade

使用swift我能得到“你好,世界"延迟3秒,每2秒淡出一次。

让多个字符串(5-8)一次重复淡入淡出的最佳方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

在接受答案的变体中,每当您发现自己嵌套动画时,通常可以使用关键帧动画:

func changeTextForLabel(label: UILabel, index: Int) {
    UIView.transitionWithView(label, duration: 3.0, options: .TransitionCrossDissolve, animations:
        {
            self.label.text = self.messages[index]
        }, completion: { [weak self] finished in
            let nextIndex = index + 1
            self?.changeTextForLabel(label, index: nextIndex < self?.messages.count ? nextIndex : 0)
        })
}

或者,如果不是淡出,你宁愿在价值观之间有一个很好的交叉消解,你可以这样做:

*

答案 1 :(得分:0)

你需要一对嵌套的动画,一个用于处理淡入,另一个用于处理淡出。你可以在第一个完成块中调用第二个。

然后,您需要更改消息,然后为新消息设置动画,这只是再次调用动画对。这是一种方式:

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    let theMessages=["Message 1","Message 2","The third message","The final message"]
    var messageIndex=0;

    override func viewDidLoad() {
        super.viewDidLoad()

        self.label.text=""
        self.label.alpha=0;
        self.animateMessage()
    }

    func animateMessage() {
        self.label.text=self.theMessages[self.messageIndex];
        if (++self.messageIndex == self.theMessages.count) {
            self.messageIndex=0;
        }

        UIView.animateWithDuration(2.0, delay: 0.5, options: .CurveEaseInOut, animations: { () -> Void in
            self.label.alpha=1.0
            }, completion: { (success) -> Void in
                UIView.animateWithDuration(2.0, delay: 0.5, options: .CurveEaseInOut, animations: { () -> Void in
                    self.label.alpha=0
                    }, completion: { (success) -> Void in
                        self.animateMessage()
                })
        })
    }
}