我正在尝试用阴影绘制一条线,但我不想保留线条,只留下阴影。
我试图将线条的笔触颜色设置为清除,但是当我这样做时,阴影也会消失。
以下代码创建了2行,我只想保留阴影,因为它看起来更好,而且不像行一样像素化。
这可能吗?
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);
感谢。
答案 0 :(得分:9)
所以你不能直接这样做,因为阴影会反映路径,所以如果你让路径透明,阴影也会是透明的。我可以想到一些解决方法(取决于你正在做什么),但是一种偷偷摸摸的方式就是将阴影画到足够远的路径下方,你可以在它上面绘制,基本上擦除它。例如,如果背景为白色,则可以实现您想要的效果:
- (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);
}
希望这会有所帮助。
答案 1 :(得分:2)
为什么不把你的线画成阴影。不要绘制阴影,而是使用.25或更小的alpha绘制黑色线条,并将其偏移到您期望阴影所在的位置。