2011-09-08 16 views
7

Estoy tratando de trazar una línea con una sombra pero no quiero mantener la línea sino solo la sombra.Dibujando una línea con una sombra, pero solo quieres mantener la sombra. IOS

He intentado establecer el color de trazo de la línea para borrar, pero cuando lo hago, la sombra también desaparece.

El siguiente código crea 2 líneas, solo quiero mantener la sombra porque se ve mejor y no está pixelada como la línea.

¿Esto es posible?

CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 2.0); 

    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 0.0, 1.0); 
    CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), YES);  

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGFloat components[4] = {0.0, 0.0, 0.0, 1.0}; 
    CGColorRef shadowColor = CGColorCreate(colorSpace, components); 
    CGContextSetShadowWithColor(UIGraphicsGetCurrentContext(), CGSizeMake(10,10), 4.0, shadowColor); 

Thanks.

Respuesta

9

Así que no puedes hacer esto directamente porque la sombra refleja la ruta, por lo que si haces que la ruta sea transparente, la sombra también será transparente. Hay algunas soluciones que puedo pensar (depende de lo que estás haciendo exactamente) pero una manera furtiva sería simplemente dibujar la sombra lo suficientemente lejos debajo de la ruta que puedas dibujar sobre ella, básicamente borrándola. Por ejemplo, si el fondo es blanco, esto va a lograr lo que desea:

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0); 
    CGContextSetLineWidth(context, 10.0); 
    CGContextMoveToPoint(context, 10.0, 30.0); 
    CGContextAddLineToPoint(context, 310.0, 30.0); 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGFloat components[4] = {0.0, 0.0, 0.0, 1.0}; 
    CGColorRef shadowColor = CGColorCreate(colorSpace, components); 
    CGContextSetShadowWithColor(context, CGSizeMake(0.0f,20.0f), 4.0, shadowColor); 
    CGContextStrokePath(context); 

    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0); 
    CGContextSetLineWidth(context, 10.0); 
    CGContextMoveToPoint(context, 10.0, 30.0); 
    CGContextAddLineToPoint(context, 310.0, 30.0); 
    CGContextStrokePath(context); 
} 

esperanza esto ayuda.

2

¿por qué no dibuja su línea como una sombra? No dibuje la sombra, sino que dibuje una línea negra con .25 o menos alfa y colóquelo en el lugar donde usted esperaría que estuviera la sombra.

Cuestiones relacionadas