Всем привет, может кто-нибудь знает как наложить несколько теней на 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)
}