【问题标题】:Swift macOS label Gradient TextSwift macOS 标签渐变文本
【发布时间】:2019-08-15 17:40:09
【问题描述】:

我在一个 macOS 项目中有一个标签,连接后它变成了 NSTextField。我想让文本有一个渐变叠加。

我有一些代码可以使用 iOS UIButton 执行此操作,但是对于这个项目,我不断收到错误消息,即 NSView 没有称为掩码的东西,我不知道要掩码到什么

extension NSTextField {
func applyGradientText(colors: [CGColor]) {
    let gradient = CAGradientLayer()
    gradient.frame = bounds
    gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
    gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
    gradient.colors = colors
    layer?.insertSublayer(gradient, at: 0)
    let overlayView = NSView(frame: bounds)
    overlayView.layer?.insertSublayer(gradient, at: 0)

overlayView 没有什么叫做掩码,我不知道要掩码到什么

    overlayView.mask = SOMETHING

    addSubview(overlayView)
  }
}

【问题讨论】:

    标签: swift macos label gradient nstextfield


    【解决方案1】:

    您需要在NSTextField 上调用wantsLayer = true,因为它默认没有图层。然后只需设置layer?.mask = gradient,标签就会显示渐变在哪里CGColor.clear

    label.applyGradientText(colors: [CGColor.black, CGColor.clear])
    
    extension NSTextField {
        func applyGradientText(colors: [CGColor]) {
            let gradient = CAGradientLayer()
            gradient.frame = bounds
            gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
            gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
            gradient.colors = colors
            wantsLayer = true
            layer?.mask = gradient
        }
    }
    

    这是你想要的吗?

    【讨论】:

    • 嘿@Leongard 感谢您的回答,但问题是该图层没有名为 mask 的变量
    • @Levi K 真的吗? label 没有掩码,但 label.layer 应该。这是一个普通的CALayer。我上面的扩展是否给你一个层错误?.mask =梯度?为我工作。
    • @Leongard 我上次试过了,但我刚刚清理了它,所以我会再试一次并告诉你
    猜你喜欢
    • 1970-01-01
    • 2021-03-07
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多