2011-08-24 25 views
2

我有一个在代码中设置的箭头的自定义形状。我想要做的是用渐变填充它。问题是,我不知道如何用渐变填充非矩形形状(暗框内的空间)。有任何想法吗?如何用iOS中的渐变填充用CGPoints定义的形状?

//Define colours used in drawing 
CGContextRef context = UIGraphicsGetCurrentContext(); 

CGColorRef lightColor = _lightColor.CGColor; 
CGColorRef darkColor = _darkColor.CGColor; 
CGColorRef shadowColor = [UIColor colorWithRed:0.2 green:0.2 
              blue:0.2 alpha:0.5].CGColor; 

//Get label text size to help determine sizes for drawing 
CGSize textSize = [[_titleLabel text] sizeWithFont:[_titleLabel font]]; 

//Set shadow 
CGContextSaveGState(context); 
CGContextSetShadowWithColor(context, CGSizeMake(0, 2), 3.0, shadowColor); 

//Set arrow shape 
CGPoint rectangle_points[] = 
{ 
    CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y), 
    CGPointMake(textSize.width+10, _coloredBoxRect.origin.y), 
    CGPointMake(textSize.width+40, _coloredBoxRect.origin.y+20), 
    CGPointMake(textSize.width+10, _coloredBoxRect.origin.y+40), 
    CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y+40), 
    CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y), 
}; 
CGContextAddLines(context, rectangle_points, 6);  
CGContextSetFillColorWithColor(context, lightColor); 
CGContextFillPath(context); 

CGContextRestoreGState(context); 

//Draw dark frame for the arrow 
CGContextSetStrokeColorWithColor(context, darkColor); 
CGContextSetLineWidth(context, 1.0); 
CGContextSaveGState(context); 
draw1PxStroke(context, CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y), CGPointMake(textSize.width+10, _coloredBoxRect.origin.y), darkColor); 
draw1PxStroke(context, CGPointMake(textSize.width+10, _coloredBoxRect.origin.y+40), CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y+40), darkColor); 
draw1PxStroke(context, CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y), CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y+40), darkColor); 
draw1PxStroke(context, CGPointMake(textSize.width+10, _coloredBoxRect.origin.y), CGPointMake(textSize.width+40, _coloredBoxRect.origin.y+20), darkColor); 
draw1PxStroke(context, CGPointMake(textSize.width+10, _coloredBoxRect.origin.y+40), CGPointMake(textSize.width+40, _coloredBoxRect.origin.y+20), darkColor);  
CGContextRestoreGState(context); 

回答