Градиент на этикетке разрывается при изменении размера представления - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть градиент UILabel, как это:

First gradient

Но если я изменю высоту родительского вида, градиент "ломается" так:

Broken gradient

Вот расширение UILabel, которое я использую, чтобы применить мой градиент

extension UILabel {
func applyGradientWith(startColor: UIColor?, endColor: UIColor?) {
    guard let endColor = endColor else {
        self.textColor = startColor
        return
    }

    let gradientText = self.text ?? ""
    let name: String = NSAttributedStringKey.font.rawValue
    let textSize: CGSize = gradientText.size(withAttributes: [NSAttributedString.Key(rawValue: name):self.font])
    let width: CGFloat = textSize.width
    let height: CGFloat = textSize.height

    UIGraphicsBeginImageContext(CGSize(width: width, height: height))

    guard let context = UIGraphicsGetCurrentContext() else {
        UIGraphicsEndImageContext()
        self.textColor = startColor
        return
    }

    UIGraphicsPushContext(context)

    let top = CGPoint.zero
    let bottom = CGPoint(x: 0, y: height)

    let colorspace = CGColorSpaceCreateDeviceRGB()

    if let startColor = startColor,
        let gradient = CGGradient(colorsSpace: colorspace, colors: [startColor.cgColor, endColor.cgColor] as CFArray, locations: [0.0, 1.0]) {
        context.drawLinearGradient(gradient, start: top, end: bottom, options: CGGradientDrawingOptions.drawsAfterEndLocation)
    } else {
        self.textColor = startColor
        return
    }

    UIGraphicsPopContext()

    let gradientImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    self.textColor = UIColor(patternImage: gradientImage!)
}
}

Кто-нибудь знает, почему градиент "ломается"? Как я могу это исправить? Заранее спасибо.

...