Остановить тень CALayer от влияния на subviews?

У меня есть пользовательский UIControl, и я хочу, чтобы у него была тень, поэтому я установил соответствующие свойства на layer. При желании тень появляется вокруг представления, но тень также появляется под текстом UILabel, который является подвью. Как вы это прекратите? Мне нужна тень вокруг внешнего наблюдения.

enter image description here

...
init() {        
    label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    self.translatesAutoresizingMaskIntoConstraints = false
    addSubview(label)

    self.layer.masksToBounds = false
    self.layer.shadowColor = UIColor.blackColor().CGColor
    self.layer.shadowOpacity = 1.0
    self.layer.shadowRadius = 2.0

    // Adding these lines trying to explicitly stop shadow on label...
    label.layer.shadowOpacity = 0
    label.layer.shadowColor = nil
    ...
}

Ответ 1

Это происходит, когда родительский вид имеет альфа меньше 1,0 или не имеет цвета фона (то есть установлен для очистки цвета). В этом случае тень переводится в подпункты. Подробнее см. Мой ответ здесь.

Apple Документы подтверждают это:

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

Shadow