關於ios顏色漸進的總結


最近一直在做iphone自定義控件,對於ios上面的圖形控制和一些api也有了些認識,所以總結一些。

顏色漸進是做圖像的基本東西,要想做的漂亮,肯定必不可少。

用到的基本api是 CGGradientRef.

/**

畫圖形漸進色方法,此方法只支持雙色值漸變
@param context 圖形上下文的CGContextRef
@param clipRect 需要畫顏色的rect
@param startPoint 畫顏色的起始點坐標
@param endPoint 畫顏色的結束點坐標
@param options CGGradientDrawingOptions
@param startColor 開始的顏色值
@param endColor 結束的顏色值
*/
- (void)DrawGradientColor:(CGContextRef)context
rect:(CGRect)clipRect
point:(CGPoint) startPoint
point:(CGPoint) endPoint
options:(CGGradientDrawingOptions) options
startColor:(UIColor*)startColor
endColor:(UIColor*)endColor
{
UIColor* colors [2] = {startColor,endColor};
CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
CGFloat colorComponents[8];

for (int i = 0; i < 2; i++) {
UIColor *color = colors[i];
CGColorRef temcolorRef = color.CGColor;

const CGFloat *components = CGColorGetComponents(temcolorRef);
for (int j = 0; j < 4; j++) {
colorComponents[i * 4 + j] = components[j];
}
}

CGGradientRef gradient = CGGradientCreateWithColorComponents(rgb, colorComponents, NULL, 2);

CGColorSpaceRelease(rgb);
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, options);
CGGradientRelease(gradient);
}

 

這樣的方法可是實現顏色的漸變,但是這只是雙色漸變,如果想多色漸變的話,那就生成UIColor* 數組到響應的數目,同時在遍歷color生成CGColorRef 的時候,用數組長度的item下標把顏色一一取出來即可。
同時,在這里我們畫顏色漸進的寬度,需要用到clipRect. 這個rect  大小是需要定義的,並且我們需要把context 給前切成這個rect的大小。

比如我們當前的 context是對於整個屏幕的,我們需要在中間截取一個rect,則先保持住現在的context.  

CGContextSaveGState(context);

然后我們截取對應的context

CGContextClipToRect(context, clipRect); 
......
......

用完這個context之后,我們還要恢復到之前的context

CGContextRestoreGState(context);

至此,就完成了。我實現的是在屏幕里畫一個矩形,然后在矩形里,實現漸進色的功能,大家可以嘗試一下。






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM