Xcodeでテキストの色を塗りつぶすために3色のグラデーションを使用しようとしていますが、探している結果を得ることが一見不可能です。私は次のことで成功しましたが、これはグラデーションを通して2つの色しか与えません。 、私はただのUIViewに3箇所でその勾配を追加することによって、それを簡素化しようとしてきたSwift(Xcode)でラベルマスクを使用した複数の色グラデーション
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)
:私がやりたいのは何
@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色で3箇所を持っていますしかし、UILabelでUIViewをマスキングするために私が何をしても、何も動作しないようです。どんな提案も非常に役に立つでしょう。上記のコードを使って写真を添付しました。可能であれば、私が達成したいことの例を添付しました。
私は3つのレイヤーでこれを行うことは自明ではありませんが、あなたは2つのためにそれをやってきました。では、IUImageを半分に分割し、両方の半分のグラデーションを実装してから再接続してみませんか? –