2011-11-01 30 views
13

Tengo un CAGradientLayer que estoy usando como una sombra. Se desvanece del 60% de opacidad a claro, de izquierda a derecha. En el borde de la pendiente, que parece estar la mezcla con la capa debajo de ella y de aligeramiento que la capa:Mezcla CAGradientLayer utilizada como sombra

Notice the ~1 pixel wide lightened effect on the photo beneath the shadow

Hay una de un píxel de ancho "brillo" al final de la sombra, en donde está se desvaneció para borrar. Parece hacer la foto detrás de la sombra más clara en la cola de la sombra. Aquí está un primer plano:

enter image description here

Este es el código que produce esa sombra:

CAGradientLayer *layer = [CAGradientLayer layer]; 
layer.frame = CGRectMake(sideBar.frame.size.width, 0, 7, sideBar.frame.size.height); 
layer.colors = [NSArray arrayWithObjects: 
       (id)[[[UIColor blackColor] colorWithAlphaComponent:0.6f] CGColor], 
       (id)[[UIColor clearColor] CGColor], 
       nil]; 
[layer setStartPoint:CGPointMake(0, 0.5)]; 
[layer setEndPoint:CGPointMake(1, 0.5)]; 
[sideBar.layer insertSublayer:layer atIndex:0]; 
sideBar.layer.masksToBounds = NO; 

Cualquier ideas sobre cómo deshacerse de eso?

Respuesta

22

Tus ojos te están engañando. No hay aumento en la intensidad en el borde del gradiente. Puede verificar: encogí la imagen a una altura de 1px en la región de la nube y miré los valores de color. image shrunk to 1px height

Sin embargo, la razón por la que está viendo una línea brillante es que las sombras no se ven así. El perfil de transparencia que esperaría ver estaría más cerca de un gaussiano que de una línea recta (que es lo que hace el degradado lineal).

Recomiendo agregar algunos puntos extra para facilitar el degradado en la región transparente. Tal vez algo como esto

layer.colors = [NSArray arrayWithObjects: 
       (id)[[[UIColor blackColor] colorWithAlphaComponent:0.6f] CGColor], 
       (id)[[[UIColor blackColor] colorWithAlphaComponent:0.3f] CGColor], 
       (id)[[[UIColor blackColor] colorWithAlphaComponent:0.1f] CGColor], 
       (id)[[UIColor clearColor] CGColor], 
       nil]; 

Es posible que tenga que aumentar el tamaño del degradado para acomodar esta mezcla adicional.