2011-09-08 6 views
7

私は影で線を描こうとしていますが、私は線を残さずに影だけを残したいと思います。影付きの線を描画しますが、影を残したいだけです。 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); 

ありがとうございます。

答えて

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

これは役立ちます。

2

なぜあなたは影として線を描かないのですか?影を描いてはいけませんが、代わりに.25以下のアルファベットで黒線を描き、影があると予想する場所にオフセットします。

関連する問題