iOS里面的背景顏色實現(xiàn)漸變的方式有兩種,第一種就是給一個漸變的圖片做背景,當然這樣有很大的局限性,比如我現(xiàn)在就需要根據(jù)項目需求要動態(tài)的改變漸變背景色。
這樣首先想到quartz 2D 這里的知識進行繪圖,我根據(jù)需要在自定義視圖里面的drawRect方法進行繪制。
- (void)drawRect:(CGRect)rect {
/**
? ? *? 1.通過CAGradientLayer 設置漸變的背景。
? ? */
CAGradientLayer*layer = [CAGradientLayernew];
//colors存放漸變的顏色的數(shù)組
layer.colors=@[(__bridgeid)[UIColorgreenColor].CGColor,(__bridgeid)[UIColorwhiteColor].CGColor];
/**
? ? * 起點和終點表示的坐標系位置,(0,0)表示左上角,(1,1)表示右下角
? ? */
layer.startPoint =CGPointMake(0.5,0);
layer.endPoint =CGPointMake(0.5,1);
layer.frame =self.bounds;
[self.layer addSublayer:layer];
/**
? ? *? 方法2.CGGradientRef
? ? */
CGContextRefctx =UIGraphicsGetCurrentContext();
CGColorSpaceRefcolorSpace=CGColorSpaceCreateDeviceRGB();
/*指定漸變色
? ? space:顏色空間
? ? components:顏色數(shù)組,注意由于指定了RGB顏色空間,那么四個數(shù)組元素表示一個顏色(red、green、blue、alpha),
? ? 如果有三個顏色則這個數(shù)組有4*3個元素
? ? locations:顏色所在位置(范圍0~1),這個數(shù)組的個數(shù)不小于components中存放顏色的個數(shù)
? ? count:漸變個數(shù),等于locations的個數(shù)
? ? */
CGFloatcompoents[12]={
0,0,0,1,
0.8,0.1,0.5,1.0,
1.0,1.0,1.0,1.0
? ? };
//設置漸變的位置
CGFloatlocations[3]={0,0.3,1.0};
//創(chuàng)建梯度上下文
CGGradientRefgradient=CGGradientCreateWithColorComponents(colorSpace, compoents, locations,3);
/*繪制線性漸變
? ? context:圖形上下文
? ? gradient:漸變色
? ? startPoint:起始位置
? ? endPoint:終止位置
? ? options:繪制方式,kCGGradientDrawsBeforeStartLocation 開始位置之前就進行繪制,到結(jié)束位置之后不再繪制,
? ? kCGGradientDrawsAfterEndLocation開始位置之前不進行繪制,到結(jié)束點之后繼續(xù)填充
? ? startPoint endPoint 不同與上一種方法,指的是真正的坐標
? ? */
CGContextDrawLinearGradient(ctx, gradient,CGPointMake(self.frame.size.width/2,0),CGPointMake(self.frame.size.width/2,self.frame.size.height), kCGGradientDrawsAfterEndLocation);
//釋放顏色空間
CGColorSpaceRelease(colorSpace);
}