xcode - Swift (Xcode) 中带有标签蒙版的多色渐变

标签 xcode swift3 uilabel mask linear-gradients

我正在尝试使用 3 色渐变为 Xcode 中的文本着色,但似乎不可能获得我正在寻找的结果。我在以下方面取得了成功,但这只能通过渐变为我提供两种颜色。

@IBOutlet weak var textSample: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    textSample.textColor = UIColor(patternImage: gradientImage(size: textSample.frame.size, color1: CIColor(color: UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)), color2: CIColor(color: UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 0.2))))
}

func gradientImage(size: CGSize, color1: CIColor, color2: CIColor) -> UIImage {

    let context = CIContext(options: nil)
    let filter = CIFilter(name: "CILinearGradient")
    var startVector: CIVector
    var endVector: CIVector

    filter!.setDefaults()

    startVector = CIVector(x: size.width * 0.5, y: 0)
    endVector = CIVector(x: size.width * 0.5, y: size.height * 0.8)

    filter!.setValue(startVector, forKey: "inputPoint0")
    filter!.setValue(endVector, forKey: "inputPoint1")
    filter!.setValue(color1, forKey: "inputColor0")
    filter!.setValue(color2, forKey: "inputColor1")

    let image = UIImage(cgImage: context.createCGImage(filter!.outputImage!, from: CGRect(x: 0, y: 0, width: size.width, height: size.height))!)
    return image
}

我想要做的是有 3 个位置,三种颜色:
location1: y:0.0
location2: y:0.8
location3: y:1.0

color1: UIColour(red: 1, green: 1, blue: 1, alpha: 0.2)
color2: UIColour(red: 1, green: 1, blue: 1, alpha: 1.0)
color3: UIColour(red: 1, green: 1, blue: 1, alpha: 0.45)

我一直试图通过将带有 3 个位置的渐变添加到 UIView 来简化它,但似乎无论我用 UILabel 屏蔽 UIView 做什么,都没有任何效果。任何建议都会非常有帮助。我附上了一张图片,上面写着我用上面的代码得到的东西,如果可能的话,我想实现一个例子。

enter image description here

最佳答案

也许更好的选择是CAGradientLayer ( AppCoda ),然后将其添加到标签 as described here .下面是一个例子:

var labelBackground = UIView(frame: label.frame)
label.backgroundColor = UIColor.clear
label.frame = label.bounds
var gradLayer = CAGradientLayer()
gradLayer.frame = labelBackground.layer.bounds
gradLayer.colors = [UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0).CGColor, UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 0.2).CGColor, UIColor(red: 1, green: 1, blue: 1, alpha: 0.45).CGColor]
gradientLayer.locations = [0.0, 0.8, 1.0]    
labelBackground.layer.addSublayer(gradLayer)
labelBackground.addSubview(label)
view.addSubview(labelBackground)

关于xcode - Swift (Xcode) 中带有标签蒙版的多色渐变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43055271/

相关文章:

c++ - OpenCV c++ 示例到 iOS 项目

ios - 如何使用 Swift 3 修剪字符串

ios - Swift 3 在单元格按钮上添加选择器问题

ios - 以编程方式使用 NSTimer 更新 UILabel 文本

ios - UICustom 单元格在 iOS 7 中不显示标签

XCode、框架、应用程序提交和 SwiftFolder

ios - 将对象添加到单个 Realm 文件

iphone - 高效使用 Interface Builder

ios - 尝试呈现 AlertController 时的窗口层次结构消息

swift - UILabel 动画更改文本部分