6

以下のコードは、完全な楕円形の放射状グラデーションを描画しますが、ビューの隅を塗りつぶしません。楕円の端を超えて描画するにはどうすればよいですか? 文書化されたオプションは kCGGradientDrawsAfterEndLocation ですが、ios では利用できないと思います。

- (void)drawRect:(CGRect)rect
{
    CGFloat colors [] = {
        0.2, 0.2, 0.2, 1.0,
        0.0, 0.0, 0.0, 1.0
    };
    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
    CGGradientRef gradient = CGGradientCreateWithColorComponents(baseSpace, colors, NULL, 2);
    CGColorSpaceRelease(baseSpace), baseSpace = NULL;
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextAddEllipseInRect(context, rect);
    CGContextClip(context);
    CGContextDrawRadialGradient(context, gradient, self.center, 0, self.center, self.frame.size.width, kCGGradientDrawsAfterEndLocation);
    CGGradientRelease(gradient), gradient = NULL;
    CGContextRestoreGState(context);
}

ここに画像の説明を入力

4

1 に答える 1

4

描画を楕円にクリップしました。これにより、グラデーションがクリッピング領域の外側に描画されなくなります。楕円を追加した行を削除し、コンテキストをクリップします。

于 2013-01-05T08:29:11.830 に答える