2011-01-29 82 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