创建和绘制渐变

来源:互联网 发布:数据来源于天地图 编辑:程序博客网 时间:2024/05/30 12:31

Core Graphics允许开发者创建两种类型的:线性的和径向的。线性渐变以某一种颜色再某一点开始,以另一种颜色在另一点结束

轴向的意味着和轴有关系。上述的两点(起点和终点)创建了一条线段,这个线段将是渐变绘制时的坐标轴

在上一个程序中添加以下代码即可

/*创建一个线性渐变 会调用一个CGGradientCreateWithColorComponents函数这个函数的返回类型的CGGradientRef的渐变这是一个句柄 一旦不再使用 要调用CGGradientRelease来释放资源需要四个参数*/

- (void)colorGradualChange:(id)sender

{

        

    //步骤1为渐变选择起点和终点 渐变的颜色将会沿着这条坐标轴过度

   CGPoint startPoint = CGPointMake(180,260);

   CGPoint endPoint = CGPointMake(140,220);

    

    //步骤2创建一个色彩空间 用于传递给CGGradientCreateWithColorComponent函数的第一个参数 当我们不再用的时候 要记得释放*/

    /*参数1color space色彩空间 是一个色彩范围的容器 类型必须是 CGColorSpaceRef闯入CGColorSpaceCreateDeviceRGB的返回值将会给我们一个RGB的色彩空间*/

    CGColorSpaceRef spaceColor =CGColorSpaceCreateDeviceRGB();

    

    //步骤 3选择起始点和终止点的颜色 实际上我们将在数组中的位置决定哪个是起始点的颜色哪个是终止点的颜色

   UIColor *startColor = [UIColorblueColor];

   CGFloat *startColorComponents = (CGFloat *)CGColorGetComponents([startColorCGColor]);

   UIColor *endColor = [UIColorgreenColor];

   CGFloat *endColorComponents = (CGFloat *)CGColorGetComponents([endColorCGColor]);

    //步骤 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};

    

    //步骤用我们已经准备好的参数调用CGGradientCreateWithColorComponents函数

    /*参数4位置数量(位置数组的颜色数量)这个参数告诉我们需要多少个颜色和位置 即下列方法的最后一个参数*/

   CGGradientRef gradient = CGGradientCreateWithColorComponents(spaceColor, (constCGFloat*)&colorComponents, (constCGFloat*)&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);

}



0 0
原创粉丝点击