【问题标题】:CAGradientLayer on UILabel can't be rotatedUILabel 上的 CAGradientLayer 无法旋转
【发布时间】:2017-05-01 11:26:55
【问题描述】:

我想要一个水平颜色渐变作为我的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!)
}
}

【问题讨论】:

    标签: ios swift uilabel core-graphics cagradientlayer


    【解决方案1】:

    你可以使用

        gradientLayer.startPoint = CGPoint.init(x: 0, y: 0)
        gradientLayer.endPoint = CGPoint.init(x: 1, y: 1)
    

    用于对角渐变。您可以使用这些点来获得不同的结果。

    【讨论】:

    • 像魅力一样工作,非常感谢!这应该也是官方文档中的提示!
    • 很高兴它有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 2015-05-15
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多