SwiftUI NSAttributedString цвет переднего плана градиента

Я использую этот код. Как я могу добавить GradientColor в strokeColor? strokeColor принимает только UIColor. Могу ли я преобразовать GradientColor в UIColor?

Я хочу это сделать:

NSAttributedString.Key.strokeColor: LinearGradient(gradient: Gradient(colors: [Color.red, Color.blue]), startPoint: .leading, endPoint: .trailing)

Мой код:

struct StrokeTextLabel: UIViewRepresentable {
    @Binding var fontName: String
    @Binding var text: String
    
    
    func makeUIView(context: Context) -> UILabel {
        let attributedStringParagraphStyle = NSMutableParagraphStyle()
        attributedStringParagraphStyle.alignment = NSTextAlignment.center
        let attributedString = NSAttributedString(
            string: text,
            attributes:[
                NSAttributedString.Key.paragraphStyle: attributedStringParagraphStyle,
                NSAttributedString.Key.strokeWidth: 3.0,
                NSAttributedString.Key.strokeColor: UIColor.red,// How can I change Gradient
                NSAttributedString.Key.font: UIFont(name: fontName, size:30.0)!
            ]
        )

        let strokeLabel = UILabel(frame: CGRect.zero)
        
        
        strokeLabel.attributedText = attributedString
        strokeLabel.backgroundColor = UIColor.clear
        strokeLabel.sizeToFit()
        strokeLabel.center = CGPoint.init(x: 0.0, y: 0.0)
        
        return strokeLabel
    }

    func updateUIView(_ uiView: UILabel, context: Context) { }
}

person Ufuk Köşker    schedule 12.02.2021    source источник


Ответы (1)


Вы не можете использовать градиент в качестве цвета; это не цвет. Обычный прием во многих ситуациях - использовать текст в качестве маски, чтобы выявить градиент позади. Например, это простой способ раскрасить текст с изменением цвета, которое течет сверху вниз или слева направо.

Однако многое зависит от точных деталей того, что вы хотите сделать с градиентом.

person matt    schedule 12.02.2021