UILabel
のテキストの色として水平の色のグラデーションが必要です。 https://developer.apple.com/reference/quartzcore/cagradientlayerに記載されているようにCAGradientLayer
を使用しています。 グラデーションはテキスト上で完全にレンダリングされますが、垂直方向にレンダリングされます。UAGelのCAGradientLayerを回転させることはできません
CATransform3DMakeRotation
説明したリンゴはグラデーションを回転させません。
this answerには、ローテーションを行うために、最初にCAGradientLayer
をビューまたは他のレイヤーに追加する必要があると記載されています。
私はそれを私のUILabelにサブレイヤとして追加してレンダリング後に削除しようとしましたが、テキストのグラデーションを変換しませんが、その上に水平グラデーションの矩形を追加しますUILabelは90度回転した。ここで
は私のコードです:
extension UILabel {
func addGradient() {
// Get size of the label
let size = CGSize(width: frame.width, height: frame.width)
let gradientLayer = CAGradientLayer()
gradientLayer.frame = CGRect(x: 0, y: 0, width: size.height, height: size.width)
gradientLayer.colors = [
UIColor.gradientBlue.cgColor,
UIColor.gradientPink.cgColor,
UIColor.gradientOrange.cgColor
]
// layer.addSublayer(gradientLayer)
gradientLayer.transform = CGAffineTransform
// This does not work
gradientLayer.transform = CATransform3DMakeRotation(CGFloat.pi/2, 0, 0, 1)
UIGraphicsBeginImageContext(size)
gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
// Create UIImage from Gradient
let gradientImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// gradientLayer.removeFromSuperlayer()
textColor = UIColor.init(patternImage: gradientImage!)
}
}
チャーミーのように動作します、ありがとうございます!これは公式文書のヒントにもなります! – fl034
うれしかった:) – user1974368