【问题标题】:Change label text for a few seconds before returning to original text在返回原始文本之前更改标签文本几秒钟
【发布时间】:2014-07-22 23:51:22
【问题描述】:

基本上,我正在尝试实现一个动画,该动画将替换标签的文本几秒钟,然后返回原始文本。我已经设法让标签更改文本并在 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()
}

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

任何帮助将不胜感激。

【问题讨论】:

    标签: swift uilabel


    【解决方案1】:

    我通过延迟解决了这个问题:

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

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

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

    【讨论】:

      【解决方案2】:

      在 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" 
         })
      

      【讨论】:

        【解决方案3】:

        我使用来自thisSwift3 对其进行了测试,它运行良好!

        Objective-C

        [UIView transitionWithView:self.label 
                          duration:0.25f 
                           options:UIViewAnimationOptionTransitionCrossDissolve 
                        animations:^{
        
            self.label.text = rand() % 2 ? @"Nice nice!" : @"Well done!";
        
          } completion:nil];
        

        斯威夫特 3

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多