-1

私は次のように UITableView セルに丸みを帯びた画像を描画しています:

CGRect imageRect = CGRectMake(8, 8, 40, 40);
CGFloat radius = 3;

CGFloat minx = CGRectGetMinX(imageRect);
CGFloat midx = CGRectGetMidX(imageRect);
CGFloat maxx = CGRectGetMaxX(imageRect);
CGFloat miny = CGRectGetMinY(imageRect);
CGFloat midy = CGRectGetMidY(imageRect);
CGFloat maxy = CGRectGetMaxY(imageRect);

CGContextMoveToPoint(context, minx, midy);
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
CGContextClosePath(context);

CGContextClip(context);

[self.theImage drawInRect:imageRect];

これは見栄えがしますが、効果を追加するために影を追加したいと思います。私は次の行に沿って何かを使用しようとしました:

CGContextSetShadowWithColor(context, CGSizeMake(2, 2), 2, [[UIColor grayColor] CGColor]);
CGContextFillPath(context);

ただし、これは画像に透明な領域がある場合にのみ機能します。画像がまったく透明でない場合、境界線の周りに影を描くことさえありません。

私が間違っていることはありますか?

4

2 に答える 2

3

これを行う正しい方法は、パスではなく UIImage 自体をクリッピングすることです。次に、次の簡単な問題です。

CGContextSetShadow(...);
[self.theClippedImage drawInRect:...];
于 2010-03-23T00:52:25.140 に答える
1

描画している画像に透明な領域がない場合、CoreGraphics は画像全体をソリッド オブジェクトとして解釈すると思います。次に、影を描画しようとすると、影は画像の境界の外側に描画されるため、表示されません。

このページは、CoreGraphics でこのような描画を行う方法の良い例を提供します。おそらく、そこにあるコードを変更してみて、問題が解決するかどうかを確認してください。

于 2010-03-20T11:39:53.380 に答える