2015-07-01 16 views
12

Ich habe eine benutzerdefinierte UIControl, und ich möchte, dass es einen Schatten hat, also setze ich die relevanten Eigenschaften auf layer. Ein Schatten erscheint wie gewünscht um die Ansicht, aber ein Schatten erscheint auch unter dem Text einer UILabel, die eine Unteransicht ist. Wie hörst du damit auf? Ich möchte nur den Schatten um die äußere Superansicht.CALayer-Schatten davon abhalten, Subviews zu beeinflussen?

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

Versuchen Sie null Schatten für label.layer einstellen, nach self.layer Schatten der Konfiguration? –

+0

Ja, tat ich. Ich habe ein paar Zeilen zum Code in Frage gestellt. –

Antwort

45

Dies geschieht, wenn übergeordnete Ansicht alpha kleiner als 1,0 ist oder keine Hintergrundfarbe hat (d.h gesetzt Farbe löschen). In diesem Fall führt der Schatten zu Unteransichten. Siehe meine Antwort here für weitere Details.

Apple-Docs dies beweisen:

Abbildung A-7 zeigt mehrere verschiedene Versionen der gleichen Probenschicht mit einem roten Schatten angewendet. Die linke und mittlere Version enthalten eine Hintergrundfarbe, so dass der Schatten nur um den Rand der Ebene erscheint. Die Version rechts enthält jedoch keine Hintergrundfarbe . In diesem Fall wird der Schatten auf den Inhalt der Ebene, Rahmen und Unterebenen angewendet.

Shadow

+2

Yup, diese äußere Ansicht hatte Alpha <1,0. –

+0

Es war so schwer zu finden, warum dies geschah. Danke vielmals!!! –