UILabel 上的 CAGradientLayer 无法旋转
CAGradientLayer on UILabel can't be rotated
我想要水平颜色渐变作为 UILabel
的文本颜色。
所以我使用 CAGradientLayer
,如 https://developer.apple.com/reference/quartzcore/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!)
}
}
你可以使用
gradientLayer.startPoint = CGPoint.init(x: 0, y: 0)
gradientLayer.endPoint = CGPoint.init(x: 1, y: 1)
用于对角渐变。你可以玩这些点,但是你想获得不同的结果。
我想要水平颜色渐变作为 UILabel
的文本颜色。
所以我使用 CAGradientLayer
,如 https://developer.apple.com/reference/quartzcore/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!)
}
}
你可以使用
gradientLayer.startPoint = CGPoint.init(x: 0, y: 0)
gradientLayer.endPoint = CGPoint.init(x: 1, y: 1)
用于对角渐变。你可以玩这些点,但是你想获得不同的结果。