2015-07-01 38 views
12

Mam niestandardowy UIControl i chcę, aby miał cień, więc ustawić odpowiednie właściwości na jego layer. Cień pojawia się wokół widoku zgodnie z życzeniem, ale cień pojawia się również pod tekstem UILabel, który jest wyglądzie. Jak to zatrzymać? Chcę tylko cienia wokół zewnętrznego superviewu.Zatrzymaj cień CALayer przed wpływem na subviews?

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 
    ... 
} 
+0

Próbowałeś ustawić zerowy cień na label.layer po skonfigurowaniu self.layer cień? –

+0

Tak, zrobiłem. Dodałem kilka linii do kodu w pytaniu. –

Odpowiedz

45

Dzieje się tak, gdy dominująca jest widokiem alfa mniejszy niż 1,0 albo nie ma kolor tła (to jest, aby czyste zabarwienie). W takim przypadku shadow przekłada się na subviews. Zobacz moją odpowiedź here, aby uzyskać więcej informacji.

jabłko Docs udowodnić:

Figura 7 A pokazuje kilka różnych wersji tej samej warstwie próbki z czerwonym cienia stosowane. Wersje lewa i środkowa zawierają kolor tła , więc cień pojawia się tylko wokół krawędzi warstwy . Jednak wersja po prawej stronie nie zawiera koloru tła . W takim przypadku cień zostanie zastosowany do zawartości warstwy: border i podwarstw.

Shadow

+2

Tak, ten widok zewnętrzny miał alfa <1.0. –

+0

tak trudno było odkryć, dlaczego tak się dzieje. Wielkie dzięki!!! –