@D0nnyG

Как наложить несколько теней на UILabel?

Всем привет, может кто-нибудь знает как наложить несколько теней на UILabel ? Если использовать обычный подход, все ок, но примеряется только одна тень
label.layer.shadowColor = UIColor.black.cgColor
label.layer1.shadowOffset = CGSize(width: 1.5, height: 4)
label.layer1.shadowOpacity = 0.5
label.layer1.shadowRadius = 2


Если создавать отдельные слои, то тени не отображаются, как я понимаю весь затык в shadowPath.

Применяемый код выдаёт такой вот результат

Немного сократил код, даже одну тень не получается нормально отобразить
extension CALayer {
func addShadows(
    x: CGFloat,
    y: CGFloat,
    blur: CGFloat,
    spread: CGFloat,
    color: UIColor,
    opacity: Float
) {
    shadowColor = color.cgColor
    shadowOpacity = opacity
    shadowOffset = CGSize(width: x, height: y)
    shadowRadius = blur / 2.0
    if spread == 0 {
        shadowPath = nil
    } else {
        let dx = -spread
        let rect = bounds.insetBy(dx: dx, dy: dx)
        shadowPath = UIBezierPath(rect: rect).cgPath
    }
    masksToBounds = false
}}
extension UIView {
func addMultipleShadows(
    from config: (x: CGFloat, y: CGFloat, blur: CGFloat, spread: CGFloat, shadowColor: UIColor, opacity: Float), backgroundColor: UIColor

) {
        let shadowLayer = CALayer()
        shadowLayer.addShadows(x: config.x, y: config.y, blur: config.blur, spread: config.spread, color: config.shadowColor, opacity: config.opacity)
    
        self.layer.insertSublayer(shadowLayer, at: 0)
    }
    self.layer.sublayers?.forEach({ sublayer in
        sublayer.shadowPath = UIBezierPath(rect: self.bounds).cgPath
    })
}}
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    myLabelWithShadow.addMultipleShadows(from:
        (0.63, 13.18, 11, 0, UIColor.red, 0.115), backgroundColor: .clear)
}


8lFcI.png
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Araya
Ну вообще у UILabel только один layer, поэтому одна тень и будет. Как вариант можешь обернуть ее в UIView и ему задать вторые тени.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы