繁体   English   中英

使用淡入淡出动画更改 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: {
        })
    })
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM