2017-05-01 7 views
1

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!) 
} 
} 

答えて

1

あなたは対角勾配のため

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

を使用することができます。あなたはそれらのポイントで遊ぶことができますが、異なる結果を達成したいと思っています。

+0

チャーミーのように動作します、ありがとうございます!これは公式文書のヒントにもなります! – fl034

+0

うれしかった:) – user1974368

関連する問題