Начертайте линия със сянка, но искате само да запазите сянката. IOS

Опитвам се да начертая линия със сянка, но не искам да запазя линията, а само сянката.

Опитах се да изчистя цвета на линията, но когато го направя, сянката също изчезва.

Следният код създава 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);

Благодаря.


person Rob    schedule 08.09.2011    source източник


Отговори (2)


Така че не можете да направите това директно, защото сянката отразява пътя, така че ако направите пътя прозрачен, сянката също ще бъде прозрачна. Има няколко заобиколни решения, за които мога да се сетя (зависи какво точно правите), но един коварен начин би бил просто да нарисувате сянката достатъчно далеч под пътя, който можете просто да нарисувате върху нея, като на практика я изтриете. Например, ако фонът е бял, това ще постигне това, което искате:

- (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);
}

Надявам се това да помогне.

person pho0    schedule 08.09.2011

защо просто не начертаете линията си като сянка. Не рисувайте сянката, а вместо това начертайте черна линия с .25 или по-малко алфа и я изместете до мястото, където бихте очаквали да бъде сянката.

person The Lazy Coder    schedule 08.09.2011