在返回原始文本之前,将标签文本更改几秒钟

时间:2014-07-22 23:51:22

标签: swift uilabel

基本上我正在尝试实现一个动画,它会在返回原始文本之前将标签的文本替换几秒钟。我已经设法让标签在3秒后更改文本并淡出,但是我无法弄清楚如何在动画完成后将文本返回到原始状态。

以下是我目前的情况:

    @IBAction func fade() {
    userMessageLabel.alpha = 100
    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(3)
    userMessageLabel.text = "Name is not valid!"
    userMessageLabel.alpha = 0
    UIView.commitAnimations()
}

我需要文字标签返回“请输入你的名字”

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

我使用延迟解决了这个问题:

userMessageLabel.text = "Name is not valid!" 
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
  userMessageLabel.text = "Please enter your first name"
}

我的解决方案包括稍微简化this answer

的延迟

您似乎已经知道如何将文本设置为淡出或淡出。如果需要,可以将动画代码添加到asyncAfter延迟函数

答案 1 :(得分:0)

在UIView上使用以下类方法可能是最好的方法。动画结束后 - 如果提供完成块,代码将被执行。

在您的示例中,您可以创建完成块,将文本标签重置为所需的值。

class func animateWithDuration(_duration: NSTimeInterval,
                animations animations: (() -> Void)!,
                completion completion: ((Bool) -> Void)!)

沿着这些方向的东西将达到预期的效果。在完成块中,您可以使用另一个动画。

UIView.animateWithDuration(3.0, animations: { 
       userMessageLabel.text = "Name is not valid!"
       userMessageLabel.alpha = 0.0
    }, completion: {
       userMessageLabel.alpha = 1.0  
       userMessageLabel.text = "Please enter your first name" 
   })

答案 2 :(得分:0)

我使用来自this Swift3 对此进行了测试,效果非常好!

<强>目标C

[UIView transitionWithView:self.label 
                  duration:0.25f 
                   options:UIViewAnimationOptionTransitionCrossDissolve 
                animations:^{

    self.label.text = rand() % 2 ? @"Nice nice!" : @"Well done!";

  } completion:nil];

Swift 3

UIView.transition(with: label,
              duration: 0.25,
               options: .transitionCrossDissolve,
            animations: { [weak self] in
                self?.label.text = (rand() % 2 == 0) ? "One" : "Two"
         }, completion: nil)