最近一直在做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);
至此,就完成了。我實現的是在屏幕里畫一個矩形,然后在矩形里,實現漸進色的功能,大家可以嘗試一下。