2011-11-30 13 views
7

Estoy luchando por crear una sombra paralela alrededor de un CALayer. Para el efecto que intento lograr, necesito tener acceso a la "intensidad" de la sombra. De alguna manera, como el control deslizante "propagación" en los estilos de capa de Photoshop. Creo que la propiedad "ShadowRadius" de CALayer es equivalente al control deslizante "Tamaño" de Photoshop.sombra de CALayer con atributos de Spread & Size?

¿Alguna sugerencia? ¿Es tal vez un degradado radial una opción?

+1

Debe intentar ilustrar su pregunta con un screenshot de Photoshop antes/después del efecto que desea aplicar. – guillaume

Respuesta

9

Establezca la capa shadowOffset, shadowOpacity y shadowRadius y debe tener lo que está buscando. Prueba esto para un proyecto sombra directamente "por debajo" de la capa con un desenfoque de 5 píxeles, lo que con el color adecuado, también podría hacer que se vea como un resplandor:

CALayer *layer = myView.layer; 
layer.shadowOpactiy = 0.50; 
layer.shadowRadius = 5.0; 
layer.shadowOffset = (CGSize){.width=0.0,.height=0.0}; 
+1

Desafortunadamente, esto no resuelve mi problema. Me gustaría controlar la "pendiente" del gradiente de sombras. Es difícil de explicar ... La nitidez, tal vez ... – bijan

+0

Entonces, ¿qué quieres decir con Spread? es Shadow Offset o Radio? –

+0

En realidad ninguno de esos. Me refiero a la intensidad del negro (color de sombra). – bijan

5

Puede controlar "difundir" mediante el establecimiento de encargo la propiedad shadowPath en un CALayer.

CGFloat radius = CGRectGetWidth(view.bounds)/2.0; 
// this is a sample code for a circle, but you can use any shape you want 
CGPathRef shadowPathRef = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0 * radius, 2.0 * radius) cornerRadius:radius].CGPath; 

layer.shadowPath = shadowPathRef; 

Si configura un radio a un valor mayor, la dispersión de sombras será mayor.