Как создать тень CALayer за полупрозрачным слоем - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь, чтобы тень падала на фигуру.
Вот пример того, как я хочу, чтобы она выглядела: enter image description here

А вот и пример того, что я получаю с моим кодом: enter image description here

Обратите внимание, что тень не видна за прозрачной формой.Есть ли способ использовать слой для рендеринга тени за прозрачной формой?

// self is a subclass of a CALayer
self.opacity = opacity
self.shadowColor = color.cgColor
self.shadowOffset = CGSize(width: shadow.x, height: shadow.y)
self.shadowRadius = CGFloat(shadow.blur)
self.shadowOpacity = 1

1 Ответ

0 голосов
/ 12 декабря 2018

Как сказал Мэтт в комментарии, вы должны добавить тень перед слоем.Вот мое предложение для решения (добавьте прозрачный слой впереди и создайте для него теневой путь):

class FrontShadowLayer: CALayer {

private let shadowLayer: CALayer

override var bounds: CGRect {
    didSet {
        updateShadowPath()
    }
}

override var frame: CGRect {
    didSet {
        updateShadowPath()
    }
}

override init() {
    shadowLayer = CALayer()
    super.init()
    shadowSetup()
}

required init?(coder aDecoder: NSCoder) {
    shadowLayer = CALayer()
    super.init(coder: aDecoder)
    shadowSetup()
}

private func shadowSetup() {
    self.addSublayer(shadowLayer)
    shadowLayer.frame = bounds
    shadowLayer.shadowColor = UIColor.gray.cgColor
    shadowLayer.shadowOpacity = 0.8
    updateShadowPath()
}

private func updateShadowPath() {
    shadowLayer.shadowPath = CGPath(rect: bounds, transform: nil)
}
}
...