2013-07-17 43 views
0

我是Core Garphics的初學者,我嘗試解決我對CGContextclip的理解。我正在做一個自定義UIButton drawrect的簡單程序如下我的CGContextclip有什麼問題。

傳遞給drawRect方法的矩形是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)的全部顏色在藍色和半紅色裏面用紅色着色。我得到藍色的矩形,但紅色的矩形在我的上下文中不可見。

我已經通過一些解決方案在這裏,也在一些博客,但對我的錯誤眼睛代碼看起來簡單和罰款。我的剪輯出了什麼問題。

謝謝你的時間和迴應。

回答

0

我覺得有一個在上下文中沒有路徑之後,你不再裁剪it.Just填寫另一個矩形:

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

是的,這解決了我的問題。謝謝。 – slysid