使用单独的“文本”无限地淡入和淡出标签

Fading In And Fading Out A Label Infinitively With separate `text`

我在 xCode 中有一个标签,我想在单词和当前时间之间无限淡出。

我在网上看过,可以找到一个淡入淡出,但我是 Swift 的新手,所以我正在努力根据我的需要进行调整。

任何帮助都会很棒,谢谢!

以下是如何执行此操作的示例:

@IBOutlet weak var label: UILabel!

@IBAction func fade_out(sender: AnyObject) {
    fade(label)
}

@IBAction func reset(sender: AnyObject) {
    label.text = "label"
}

func fade(label : UILabel) {
     UIView.animateWithDuration(1.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: {
         label.alpha = 0.0
     }, completion: nil)

     UIView.animateWithDuration(2.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: {
         label.alpha = 1.0
         label.text = String(NSDate())
     }, completion: nil)
}

我所做的是先用 UIViewAnimationOptions.CurveEaseOut 淡出标签,然后用 UIViewAnimationOptions.CurveEaseIn 淡出今天的日期。

Here 是我为您创建的一个测试项目,以便您了解我是如何完成的。

编辑
要做到无限,你可以这样做并且没有按钮

var timer = NSTimer()
var b = false

override func viewDidLoad() {
    super.viewDidLoad()
    self.timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: #selector(ViewController.fade), userInfo: nil, repeats: true)
}

func fade() {
        if b{
            UIView.animateWithDuration(1.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: {
                self.label.alpha = 0.0
                self.label.text = "Label"
                }, completion: nil)

            UIView.animateWithDuration(1.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: {
                self.label.alpha = 1.0
                self.label.text = String(NSDate())
                }, completion: nil)

            b = false
        }
        else{
            UIView.animateWithDuration(1.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: {
                self.label.alpha = 0.0
                self.label.text = String(NSDate())
                }, completion: nil)

            UIView.animateWithDuration(1.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: {
                self.label.alpha = 1.0
                self.label.text = "Label"
                }, completion: nil)

            b = true
        }

    }

一种更优雅的方法是使用 CAAnimation ->

  class YourClass: UIViewController , ..{

     @IBOutlet weak var fadingLabel: UILabel!
     var a = true


     override func viewDidLoad() {
          super.viewDidLoad()


              NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(ViewController.swapText), userInfo: nil, repeats: true)
              let anim : CABasicAnimation = CABasicAnimation(keyPath: "opacity")
              anim.fromValue = 1
              anim.toValue = 0
              anim.duration = 0.5
              anim.autoreverses = true
              anim.repeatCount = Float.infinity
              fadingLabel.layer.addAnimation(anim, forKey: "flashOpacity")


     }


     func swapText(){

          if a == true{

              fadingLabel.text = String(NSDate())
              a = false
            }else{

              fadingLabel.text = String("My Text")
              a = true
          }

     }


 } 

您现在要做的就是相应地操作 NSTimer() 中的 anim.duration 和 timeInterval ...