我的CGContextclip有什么问题。

时间:2013-07-17 13:41:18

标签: ios core-graphics

我是Core Garphics的初学者,我尝试了解我对CGContextclip的理解。我正在使用自定义UIButton drawrect做一个简单的程序,如下所示

传递给drawRect方法的Rect维度是CustomButton * button = [[CustomButton alloc] initWithFrame:CGRectMake(0,0,100,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]);
CGContextSetLineWidth(context, 3.0f);

CGContextAddRect(context, rect);
CGContextStrokeRect(context, rect);
//CGContextFillRect(context, rect);

CGContextSaveGState(context);
CGContextSetStrokeColorWithColor(context, [[UIColor redColor] CGColor]);
CGContextSetFillColorWithColor(context, [[UIColor redColor]CGColor]);

CGMutablePathRef rectPath = CGPathCreateMutable();

CGPathMoveToPoint(rectPath, NULL, CGRectGetMinX(rect), CGRectGetMidY(rect));
CGPathAddLineToPoint(rectPath, NULL, CGRectGetMaxX(rect), CGRectGetMidY(rect));
CGPathAddLineToPoint(rectPath, NULL, CGRectGetMaxX(rect), CGRectGetMaxY(rect));
CGPathAddLineToPoint(rectPath, NULL, CGRectGetMinX(rect), CGRectGetMaxY(rect));
CGPathCloseSubpath(rectPath);

CGContextAddPath(context, rectPath);
CGContextClip(context);
CGContextStrokePath(context);
//CGContextFillPath(context);
CGContextRestoreGState(context);

CGColorRelease(colorRef);
}

@end

我期待一个完整的矩形,其尺寸(0,0,100,50)为蓝色,半直肠内部为红色。我得到蓝色的矩形,但在我的背景下看不到红色的矩形。

我在这里和一些博客上都经历过一些解决方案,但对于我的错误眼睛,代码看起来很简单。我的裁剪有什么问题。

感谢您的时间和回应。

1 个答案:

答案 0 :(得分:0)

我认为在你修剪它之后,上下文中没有路径了。只需填充另一个矩形:

//CGContextFillPath(context);
CGContextFillRect(context, rect);