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