2011-01-29 32 views
3

我正在尝试生成具有渐变/着色效果的图。现在我可以绘制线图并将梯度效果应用到该图。它是应用于整个视图而不是图。现在我得到了像这样的图像enter image description here。但我想要enter image description here这个。我需要在图形下方的渐变效果。iPhone中折线图的梯度效应

请帮我这个。提前致谢。

,我使用的代码是:

UIGraphicsBeginImageContext(self.graphView.frame.size); 
[graphView.image drawInRect:CGRectMake(0, 0, self.graphView.frame.size.width, self.graphView.frame.size.height)]; 
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
CGContextSetLineJoin(UIGraphicsGetCurrentContext(), kCGLineJoinRound); 
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 2.0); 
CGContextSetRGBFillColor(UIGraphicsGetCurrentContext(), 225, 48, 48, 1.0); 
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 225, 225, 0.0, 1.0); 
CGContextBeginPath(UIGraphicsGetCurrentContext()); 

float xCordinate, yCordinate; 

for (int i = 0; i < [graphValues count]; i++) { 
    int val = [[graphValues objectAtIndex: i] intValue]/5; 
    float diff = [[graphValues objectAtIndex: i] floatValue]/5 - val; 
    yCordinate = val * 120 + 120 * diff; 
    xCordinate = graphWidth * i/[graphValues count] + 60; 
    if (i == 0) 
     CGContextMoveToPoint(UIGraphicsGetCurrentContext(), xCordinate, graphHeight + 60 - yCordinate); 
    else 
     CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), xCordinate, graphHeight + 60 - yCordinate); 
} 
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), xCordinate, graphHeight + 60); 
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), 60, graphHeight + 60); 
CGContextClosePath(UIGraphicsGetCurrentContext()); 
CGContextSaveGState(UIGraphicsGetCurrentContext()); 
CGContextDrawPath(UIGraphicsGetCurrentContext(), kCGPathStroke); 

// CGContextFillPath(UIGraphicsGetCurrentContext());

CGContextClip(UIGraphicsGetCurrentContext()); 


//Draw Gradient 
UIColor *topColor = [UIColor colorWithRed: 1.0 green:1.0 blue:1.0 alpha:1.0]; 
UIColor *bottomColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.0]; 
CGColorRef colorRef[] = { [topColor CGColor], [bottomColor CGColor] }; 
CFArrayRef colors = CFArrayCreate(NULL, (const void**)colorRef, sizeof(colorRef)/sizeof(CGColorRef), &kCFTypeArrayCallBacks); 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, colors, NULL); 
CFRelease(colorSpace); 
CFRelease(colors); 

// Draw a linear gradient from top to bottom 
CGPoint gradStartPoint = CGPointMake(50.0, graphView.bounds.size.height); 
CGPoint gradEndPoint = CGPointMake(50.0, 0.0); 
CGContextDrawLinearGradient(UIGraphicsGetCurrentContext(), gradient, gradStartPoint, gradEndPoint, 0); 

CFRelease(gradient); 

// Cleanup 
CGColorSpaceRelease(colorSpace); 

CGContextRestoreGState(UIGraphicsGetCurrentContext()); 

graphView.image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+0

如果您希望完整的红色(或白色)颜色位于图形的顶部点,而不是视图的顶部,则需要指定图形中最高点的y坐标作为顶部的梯度。 – 2011-01-30 17:22:38

回答

4

诀窍是在绘制渐变之前设置剪切路径。有关详细信息,请参阅CGContextRef文档。

+0

谢谢,但我正在使用剪切路径。 CGContextClip(UIGraphicsGetCurrentContext());但是当前的上下文是用后面的图像视图定义的。UIGraphicsBeginImageContext(self.graphView.frame.size); \t [graphView.image drawInRect:CGRectMake(0,0,self.graphView.frame.size.width,self.graphView.frame.size.height)]; – MohanVydehi 2011-01-29 08:07:57