2015-07-01 11 views
12

Ho un UIControl personalizzato e voglio che abbia un'ombra, quindi ho impostato le proprietà rilevanti sul suo layer. Un'ombra appare intorno alla vista come desiderato, ma un'ombra appare anche sotto il testo di UILabel, che è una sottoview. Come lo fermi? Voglio solo l'ombra attorno al superview esterno.Arresta l'ombra CALayer dall'influenza delle sottoview?

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

Hai provato a impostare lo zero ombra per label.layer dopo la configurazione self.layer ombra? –

+0

Sì, l'ho fatto. Ho aggiunto un paio di righe al codice in questione. –

risposta

45

Ciò accade quando vista primaria ha alfa inferiore a 1,0 o ha alcun colore di sfondo (cioè è impostato a respingere colore). In questo caso l'ombra si traduce in sotto-visualizzazioni. Vedere la mia risposta here per maggiori dettagli.

mela Docs dimostrare questo:

Figura A-7 mostra diverse versioni dello stesso strato campione con ombra rossa applicata. Le versioni sinistra e centrale includono un colore di sfondo in modo che l'ombra venga visualizzata solo attorno al bordo del livello . Tuttavia, la versione a destra non include un colore di sfondo . In questo caso, l'ombra viene applicata al contenuto del livello, al bordo e ai sottolivelli.

Shadow

+2

Sì, quella vista esterna aveva alpha <1.0. –

+0

era così difficile trovare il motivo per cui questo stava accadendo. Molte grazie!!! –