Core Graphics允许开发者创建两种类型的:线性的和径向的。线性渐变以某一种颜色再某一点开始,以另一种颜色在另一点结束
轴向的意味着和轴有关系。上述的两点(起点和终点)创建了一条线段,这个线段将是渐变绘制时的坐标轴
在上一个程序中添加以下代码即可
/*创建一个线性渐变 会调用一个CGGradientCreateWithColorComponents函数 这个函数的返回类型的CGGradientRef的渐变 这是一个句柄 一旦不再使用 要调用CGGradientRelease来释放资源 需要四个参数*/
- (void)colorGradualChange:(id)sender
{
//步骤1 为渐变选择起点和终点 渐变的颜色将会沿着这条坐标轴过度
CGPoint startPoint = CGPointMake(180,260);
CGPoint endPoint = CGPointMake(140,220);
//步骤2 创建一个色彩空间 用于传递给CGGradientCreateWithColorComponent函数的第一个参数 当我们不再用的时候 要记得释放*/
/*参数1(color space) 色彩空间 是一个色彩范围的容器 类型必须是 CGColorSpaceRef 闯入CGColorSpaceCreateDeviceRGB的返回值 将会给我们一个RGB的色彩空间*/
CGColorSpaceRef spaceColor = CGColorSpaceCreateDeviceRGB();
//步骤 3 选择起始点和终止点的颜色 实际上 我们将在数组中的位置决定哪个是起始点的颜色哪个是终止点的颜色
UIColor *startColor = [UIColor blueColor];
CGFloat *startColorComponents = (CGFloat *)CGColorGetComponents([startColor CGColor]);
UIColor *endColor = [UIColor greenColor];
CGFloat *endColorComponents = (CGFloat *)CGColorGetComponents([endColor CGColor]);
//步骤 4 获取每种颜色的分量 并保存在一个数组中 传递给CGGradientCreateWithColorComponents函数
/*参数2 颜色分量的数组 这个数组必须包含红 绿 蓝和透明度 如果需要两个点(起点和终点)必须要为这个数组提供两种颜色*/
CGFloat colorComponents[8] = {
startColorComponents[0],
startColorComponents[1],
startColorComponents[2],
startColorComponents[3],
/*起始点的颜色是蓝色*/
endColorComponents[0],
endColorComponents[1],
endColorComponents[2],
endColorComponents[3]
/*终止点的颜色是绿色*/
};
//步骤 5 因为我们在数组中只有两个颜色 指出渐变最开始的位置 接着指定结束的位置 并把这些指针放在数组中 传递给CGGradientCreateWithColorComponents函数
/*参数3 位置数组 颜色数组中各个颜色的位置 此参数控制渐变从一种颜色到另一种颜色的速度 第一种颜色是渐变的起始颜色 第二种颜色是渐变的终止颜色*/
CGFloat colorIndices[2]={0.0f,1.0f};
//步骤6 用我们已经准备好的参数调用CGGradientCreateWithColorComponents函数
/*参数4 位置数量(位置数组的颜色数量)这个参数告诉我们需要多少个颜色和位置 即下列方法的最后一个参数*/
CGGradientRef gradient = CGGradientCreateWithColorComponents(spaceColor, (const CGFloat*)&colorComponents, (const CGFloat*)&colorIndices, 2);
//步骤 7 释放色彩空间
CGColorSpaceRelease(spaceColor);
//用CGContextDrawLinearGradient过程 在图形上下文 绘制该线性渐变 需要5个参数
/*参数 1 指定用于绘制线性渐变的图形上下文*/
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
/*参数 2 我们使用CGGradientCreateWithColorComponents方法创建线性渐变的对象的句柄*/
/*参数 3 渐变的起点*/
/*参数 4 渐变的终点*/
/*参数 5 当起点和终点不在上下文边缘内指定如何处理*/
CGContextDrawLinearGradient(currentContext, gradient, startPoint, endPoint, 0);
//释放句柄
CGGradientRelease(gradient);
CGContextRestoreGState(currentContext);
}