使用淡入淡出动画更改 NSTextField 文本颜色 - Cocoa

Change NSTextField text color with fade animation - Cocoa

我正在尝试使用 NSAnimationContext 来更改 NSTextField 带有淡入淡出动画的文本颜色。但它不起作用。请帮我解决这个问题。谢谢大家!

代码:

 override func viewDidLoad() {
        super.viewDidLoad()
 
        label!.animator().textColor = NSColor.black
    }
    
    @IBAction func changeColor(_ sender: NSButton){
        
        NSAnimationContext.runAnimationGroup { (context) in
            
            context.duration = 1.0
            label!.animator().textColor = NSColor.red
        }
   }

这是一种可能的解决方案的概要:

  • 子类NSAnimation,用TextColorAnimation
  • 表示
  • init 参加 NSTextField 和决赛 NSColor
  • 根据 NSAnimation 文档覆盖 currentProgress 以 (a) 调用超级实现和 (b) 设置中间颜色和 display NSTextField
  • 使用NSColor.blend(...)确定中间色
  • start这个NSAnimation

你应该得到一个漂亮的平滑颜色过渡。 HTH

更新完成处理程序中的颜色和 alpha 值:

@IBAction func changeColor(_ sender: NSButton){
    NSAnimationContext.runAnimationGroup({ [self] context in
        context.duration = 1.0
        context.timingFunction = CAMediaTimingFunction(name: .easeOut)
        label.animator().alphaValue = 0.0
        label.animator().textColor = NSColor.black
    }, completionHandler: { [self] in
        NSAnimationContext.runAnimationGroup({ [self] context in
            context.duration = 1.0
            context.timingFunction = CAMediaTimingFunction(name: .easeIn)
            label.animator().alphaValue = 1.0
            label.animator().textColor = NSColor.red
        }, completionHandler: {
        })
    })
 }