首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >淡出一串字符串

淡出一串字符串
EN

Stack Overflow用户
提问于 2015-12-07 02:27:37
回答 2查看 269关注 0票数 0

使用迅捷,我能够得到“你好,世界”这两个字淡出每2秒与一个3秒的延迟。

,获得多个字符串(5-8)的最佳方法是一次一个重复地淡入和退出?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-07 03:17:28

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

然后,您需要更改消息,然后对新消息进行动画化,这只是再次调用动画对。有一种方法:

代码语言:javascript
复制
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()
                })
        })
    }
}
票数 0
EN

Stack Overflow用户

发布于 2015-12-07 22:18:07

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

代码语言:javascript
复制
@IBOutlet weak var label: UILabel!

let messages = ["Message 1", "Message 2", "The third message", "The final message"]

override func viewDidLoad() {
    super.viewDidLoad()

    changeTextForLabel(label, index: 0)
}

func changeTextForLabel(label: UILabel, index: Int) {
    label.text = messages[index]
    label.alpha = 0

    UIView.animateKeyframesWithDuration(5, delay: 0, options: [], animations:
        {
            UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.2) { label.alpha = 1 }
            UIView.addKeyframeWithRelativeStartTime(0.8, relativeDuration: 0.2) { label.alpha = 0 }
        }, completion: { [weak self] finished in
            let nextIndex = index + 1
            self?.changeTextForLabel(label, index: nextIndex < self?.messages.count ? nextIndex : 0)
        })
}

或者,如果你宁愿在这些值之间进行一次很好的交叉溶解,而不是褪色,你可以这样做:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34125496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档