Estoy buscando para agregar varias sombras con diferentes opacidades a una vista. Las especificaciones para las sombras son las siguientes:
Puedo hacer que todo esto funcione bien usando CALayer
s. Aquí está el código para el que estoy trabajando (tenga en count que no me he molestado en configurar shadowPath
todavía, y no lo haré hasta que consiga el funcionamiento de las sombras múltiples):
layer.cornerRadius = 4 layer.masksToBounds = false layer.shouldRasterize = true let layer2 = CALayer(layer: layer), layer3 = CALayer(layer: layer), layer4 = CALayer(layer: layer) layer.shadowOffset = CGSizeMake(0, 4) layer.shadowRadius = 1 layer2.shadowOffset = CGSizeMake(0, 10) layer2.shadowRadius = 10 layer2.shadowColor = UIColor.blackColor().CGColor layer2.shouldRasterize = true //Evidently not copied during initialization from self.layer layer3.shadowOffset = CGSizeMake(0, 2) layer3.shadowRadius = 4 layer3.shouldRasterize = true layer4.shadowOffset = CGSizeMake(0, 1) layer4.shadowRadius = 1 layer4.shadowOpacity = 0.1 layer4.shouldRasterize = true layer.addSublayer(layer2) layer.addSublayer(layer3) layer.addSublayer(layer4)
(Si bien este código está en Swift, confío en que le parezca lo suficientemente familiar a la mayoría de los desarrolladores de Cocoa / Objective-C para que tenga sentido. Solo sepa que esa layer
es equivalente a self.layer
en este context).
El problema, sin embargo, surge cuando bash usar diferentes opacidades para cada sombra. La propiedad shadowOpacity
de la layer
termina aplicándose a todas sus subcapas. Este es un problema, ya que necesito que todos tengan su propia opacidad en la sombra. He intentado configurar la opacidad de sombra de cada capa en su valor correcto ( 0.04
, 0.12
, etc.), pero luego se aplica la opacidad de 0.04
de layer
a todas las subcapas. Así que traté de establecer layer.shadowOpacity
en 1.0
, pero esto hizo que todas las sombras layer.shadowOpacity
negras. También traté de ser inteligente y hacer layer2.shadowColor = UIColor(networking: 0, green: 0, blue: 0, alpha: 0.12).CGColor
, pero se cambió a negro completo sin transparencia.
Supongo que tiene algún sentido que todas las capas tengan la misma opacidad de la sombra. Pero, ¿cuál es la forma de conseguir este funcionamiento, las diferentes opacidades y todo (no es necesario utilizar CALayer
si es más fácil de otra manera)?
Por favor, no responda con "solo use una image" : no importa cuán sano sea, estoy tratando de evitarlo. Solo humor yo
Gracias.
EDITAR: según lo solicite, esto es lo que busco: .