swift 如何在TextView iOS中对文本给予渐变?

gc0ot86w  于 2023-04-19  发布在  Swift
关注(0)|答案(3)|浏览(222)

我想在UITextView中对文本给予渐变效果,当我尝试使用渐变层时,其应用于完整的textview背景。我只想将其应用于文本和背景coloratura应分开。
我想要这样的输出:

它是这样来的:

有人可以建议如何实现输出像第一个图像上UITextView

我专门为UITextView寻找解决方案,而不是UILabel或UIView

jjhzyzn0

jjhzyzn01#

您可以为文本创建图案颜色。因此,您可以将此颜色应用于任何文本组件(如标签,textView,按钮等)。
请查看下面的示例。您可以在getGradientLayer()方法中自定义颜色模式。

func gradientColor(bounds: CGRect, gradientLayer :CAGradientLayer) -> UIColor? {
//We are creating UIImage to get gradient color.
      UIGraphicsBeginImageContext(gradientLayer.bounds.size)
      gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
      let image = UIGraphicsGetImageFromCurrentImageContext()
      UIGraphicsEndImageContext()
      return UIColor(patternImage: image!)
}
func getGradientLayer(bounds : CGRect) -> CAGradientLayer{
    let gradient = CAGradientLayer()
    gradient.frame = bounds
    gradient.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
    gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
    gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
    return gradient
}

let textView = UITextView(frame: CGRect(x: 0, y: 0, width: 400, height: 400))
textView.font = UIFont.boldSystemFont(ofSize:50)
textView.textAlignment = .center
textView.text = "Hello World!"
let gradient = getGradientLayer(bounds: textView.bounds)
textView.textColor = gradientColor(bounds: textView.bounds, gradientLayer: gradient)

输出:-

qnyhuwrf

qnyhuwrf2#

实现此目的最简单的方法是在UILabel或UITextView上创建具有所需渐变的UIView,然后将渐变UIView遮罩在textView上。
有一个很好的教程here

dy2hfwbg

dy2hfwbg3#

您可以使用这两种方法中的任何一种为任何内容(即UILabel的文本,边框,背景,UITextView的文本,UIView或几乎所有内容)给予渐变色。

UIColor.fromGradient(GradientLayer, frame: CGRect)
UIColor.fromGradientWithDirection(GradientDirection, frame: CGRect, colors: [colors])

对于第一种方法,您需要创建渐变层,并像下面这样将其与UITextView的rect一起传递

let gradient = GradientLayer(direction: .leftToRight, colors: [.red, .green], locations: [0, 1])
yourTextView.textColor = UIColor.fromGradient(gradient, frame: yourTextView.bounds)

对于第二个方法,只需像这样传递这些参数

youtTextView.textColor = UIColor.fromGradientWithDirection(.leftToRight, frame: youtTextView.bounds, colors: [.green, .yellow, .red])

B:对于这两种情况,如果你改变了你的框架,你也必须更新你的渐变。这意味着在你的textView每次改变之后,你必须用你更新的框架设置渐变,否则以前的渐变会重复。

相关问题