创建和绘制渐变_Quartz 2D

31 篇文章 0 订阅
6 篇文章 0 订阅

转自:http://blog.csdn.net/u012890117/article/details/17606755


注意如果在viewDidLoad(也就是view外面调用时候)上下文应该使用:

    //创建CGContextRef
    UIGraphicsBeginImageContext(self.view.bounds.size);
    CGContextRef gc = UIGraphicsGetCurrentContext();
    //Context中获取图像,并显示在界面上
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

正文:

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

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

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

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

- (void)colorGradualChange:(id)sender

{

        

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

    CGPoint startPoint = CGPointMake(180,260);

    CGPoint endPoint = CGPointMake(140,220);

    

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

    /*参数1color 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函数

    /*参数颜色分量的数组 这个数组必须包含红 绿 蓝和透明度 如果需要两个点(起点和终点)必须要为这个数组提供两种颜色*/

    CGFloat colorComponents[8] = {

        startColorComponents[0],

        startColorComponents[1],

        startColorComponents[2],

        startColorComponents[3],

        /*起始点的颜色是蓝色*/

        endColorComponents[0],

        endColorComponents[1],

        endColorComponents[2],

        endColorComponents[3]

        /*终止点的颜色是绿色*/

    };

    

    //步骤 5 因为我们在数组中只有两个颜色 指出渐变最开始的位置 接着指定结束的位置 并把这些指针放在数组中 传递给CGGradientCreateWithColorComponents函数

    /*参数位置数组 颜色数组中各个颜色的位置 此参数控制渐变从一种颜色到另一种颜色的速度 第一种颜色是渐变的起始颜色 第二种颜色是渐变的终止颜色*/

    CGFloat colorIndices[2]={0.0f,1.0f};

    

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

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

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

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值