核心图形 - 阴影未见

时间:2013-07-18 10:23:22

标签: ios core-graphics shadow

我写了一个简单的drawRect,意图绘制一个圆圈,投下阴影并用蓝色填充它。我已经成功地画了一个圆圈并用蓝色填充但我的影子没有生效。如果我抚摸我的圆圈,而不是填充,我看到阴影在圆圈内,在填充过程中它被填充颜色绘制

rect到我的drawRect有维[[CustomButton alloc] initWithFrame:CGRectMake(0,0,50,50)];

@implementation CustomButton

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
    [self setBackgroundColor:[UIColor clearColor]];
}
return self;
}

- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGColorRef colorRef = [[UIColor blueColor] CGColor];
CGContextSetStrokeColorWithColor(context, colorRef);
CGContextSetFillColorWithColor(context, [[UIColor blueColor] CGColor]);


CGRect buttonRect = CGRectInset(rect, 3, 3);

CGPoint centerPoint = CGPointMake(CGRectGetMidX(buttonRect  ),     CGRectGetMidY(buttonRect));
CGFloat radius = CGRectGetWidth(buttonRect) / 2;

CGContextSaveGState(context);
CGContextSetShadow(context, CGSizeMake(15.0, 20.0), 1.0);
CGContextAddArc(context, centerPoint.x, centerPoint.y, radius, 0, 2*M_PI, 1);
CGContextClip(context);
CGContextFillRect(context, buttonRect);
CGContextRestoreGState(context);


CGColorRelease(colorRef);

}

@end

谢谢

1 个答案:

答案 0 :(得分:0)

试试这个:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGColorRef colorRef = [[UIColor blueColor] CGColor];
    CGContextSetStrokeColorWithColor(context, colorRef);
    CGContextSetFillColorWithColor(context, [[UIColor blueColor] CGColor]);


    CGRect buttonRect = CGRectInset(rect, 3, 3);

    CGPoint centerPoint = CGPointMake(CGRectGetMidX(buttonRect  ),     CGRectGetMidY(buttonRect));
    CGFloat radius = CGRectGetWidth(buttonRect) / 2;

    CGContextSaveGState(context);
    CGContextSetShadow(context, CGSizeMake(2.0, 2.0), 2.0);
    CGContextAddArc(context, centerPoint.x, centerPoint.y, radius, 0, 2*M_PI, 1);
    //CGContextClip(context);
    CGContextFillPath(context);
    CGContextRestoreGState(context);


    CGColorRelease(colorRef);
}

你的影子是长方形的,这就是为什么没有在圆圈下看到它。我将调用CGContextFillRect更改为CGContextFillPath,即您已使用CGContextAddArc创建的路径。

这就是你想要的吗?

修改

您可以在此处找到一个项目:https://bitbucket.org/reydan/so_circleshadow