iOS:quartz2D绘图(绘制渐变图形)
quartzD可以用来绘制渐变图形,即图形向外或向内发散,会变得越来越模糊。
渐变分为线性渐变和径向渐变,所谓线性渐变,就是图形以线的方式发散,发散后一般呈现出矩形的样子;而径向渐变,就是以半径的大小往外或往内发散,发散后呈现出圆形的样子。
渐变系数:0.0~1.0
渐变模式:可以进行与操作
kCGGradientDrawsBeforeStartLocation = (1 << 0), //向内渐变
kCGGradientDrawsAfterEndLocation = (1 << 1) //向外渐变
具体举例如下:
1.自定义一个视图类DemoView,并将控制器视图关联该自定义类,在这个自定义类中重写- (void)drawRect:(CGRect)rect方法,绘制渐变图形的调用方法都写在里面。

//绘制渐变图形的调用方法
- (void)drawRect:(CGRect)rect
{
//1.获取绘图的上下文
CGContextRef context = UIGraphicsGetCurrentContext(); //线性渐变
[self drawLinarGradient:context]; //径向渐变
[self drawRadialGradient:context];
}
2.绘制渐变图形:线性渐变和径向渐变
绘制线性渐变图形:
#pragma mark -画线性渐变
-(void)drawLinarGradient:(CGContextRef) context
{ //2.创建一个渐变
//2.1 创建一个颜色空间
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); //2.2 设置颜色
//设置开始颜色
UIColor *startColor = [UIColor redColor];
const CGFloat *startColorComponents = CGColorGetComponents([startColor CGColor]); //设置中间颜色
UIColor *midColor = [UIColor greenColor];
const CGFloat *midColorComponents = CGColorGetComponents([midColor CGColor]); //设置结束颜色
UIColor *endColor = [UIColor blueColor];
const CGFloat *endColorComponents = CGColorGetComponents([endColor CGColor]);
//颜色分量的强度值的数组
CGFloat components[] = {startColorComponents[],startColorComponents[],
startColorComponents[],startColorComponents[], midColorComponents[],midColorComponents[],
midColorComponents[],midColorComponents[], endColorComponents[],endColorComponents[],
endColorComponents[],endColorComponents[]
};
//渐变系数(程度)
CGFloat locations[] = {0.0,0.5,1.0}; //创建渐变(参数:颜色空间、颜色分量强度值数组、渐变系数数组、设置的渐变系数个数)
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, ); //3.在上下文中画渐变(参数:上下文、渐变、开始点、结束点、渐变模式,默认为0)
CGContextDrawLinearGradient(context, gradient, CGPointMake(, ), CGPointMake(, ), ); //渐变模式:
//kCGGradientDrawsAfterEndLocation //向内发散
//kCGGradientDrawsBeforeStartLocation //向外发散 //4.对creat创建的对象必须清理(避免内存泄露)
CGColorSpaceRelease(colorSpace);
CGGradientRelease(gradient);
}
绘制的线性渐变图形截图为:

绘制径向渐变图形:
#pragma mark -画径向渐变
-(void)drawRadialGradient:(CGContextRef) context
{ //2.创建一个渐变
//2.1 创建一个颜色空间
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); //2.2 设置开始颜色和结束颜色
UIColor *startColor = [UIColor redColor];
const CGFloat *startColorComponents = CGColorGetComponents([startColor CGColor]); UIColor *endColor = [UIColor whiteColor];
const CGFloat *endColorComponents = CGColorGetComponents([endColor CGColor]);
//颜色分量的强度值数组
CGFloat components[] = {startColorComponents[],startColorComponents[],
startColorComponents[],startColorComponents[],
endColorComponents[],endColorComponents[],
endColorComponents[],endColorComponents[]
}; //渐变系数数组
CGFloat locations[] = {0.0,1.0};
//创建渐变对象(参数:颜色空间、颜色分量的强度值数组、渐变系数数组、设置的渐变系数个数)
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, ); //3.画渐变(参数:上下文、渐变对象、起点、径向半径、终点、径向半径、渐变模式)
CGContextDrawRadialGradient(context, gradient, CGPointMake(, ), , CGPointMake(, ), , kCGGradientDrawsBeforeStartLocation);
//渐变模式:
//kCGGradientDrawsAfterEndLocation //向外发散
//kCGGradientDrawsBeforeStartLocation //向里发散
//4.清理
CGColorSpaceRelease(colorSpace);
CGGradientRelease(gradient);
}
绘制的径向渐变图形截图为:

iOS:quartz2D绘图(绘制渐变图形)的更多相关文章
- [html5] 学习笔记-Canvas 绘制渐变图形与绘制变形图形
在 HTML5 中,使用 Canvas API 绘制图形的知识,可以对绘制图形进行处理,包含使用 Canvas API 绘制渐变图形,使用 Canvas API 的坐标轴变换处理功能绘制变形图形.其中 ...
- iOS:quartz2D绘图(给图形绘制阴影)
quartz2D既可以绘制原始图形,也可以给原始图形绘制阴影. 绘制阴影时,需要的一些参数:上下文.阴影偏移量.阴影模糊系数 注意:在drawRect:方法中同时调用绘制同一个图形时,在对绘制的图形做 ...
- iOS:quartz2D绘图 (动画)
quartz2D可以用来绘制自己需要的图形,它们绘制出来的是一个静态的图形,那么如何绘制一个动态的图形呢?动态的图形就是动画,所谓动画,其实就是很多张图片在短时间内不停的切换所产生的一种视觉效果.qu ...
- Canvas绘制渐变
1.绘制线性渐变 Canvas提供了用于创建线性渐变的函数createLinearGradient(x0,y0,x1,y1),坐标点(x0,y0)是起点 ,(x1,y1)是终点 创建一个渐变色 var ...
- iOS开发UI篇—Quartz2D使用(绘制基本图形)
iOS开发UI篇—Quartz2D使用(绘制基本图形) 一.简单说明 图形上下文(Graphics Context):是一个CGContextRef类型的数据 图形上下文的作用:保存绘图信息.绘图状态 ...
- iOS开发UI之Quartz2D使用(绘制基本图形)
iOS开发UI篇—Quartz2D使用(绘制基本图形) 一.简单说明 图形上下文(Graphics Context):是一个CGContextRef类型的数据 图形上下文的作用:保存绘图信息.绘图状态 ...
- iOS:quartz2D绘图
Quartz-2D:绘图 一.介绍: •Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境 •Quartz 2D API可以实现许多功能,如基于路径的绘图.透明度.阴影 ...
- iOS:quartz2D绘图小项目(涂鸦画板)
介绍:学了quartz2D的绘图知识后,我根据它的一些功能制作了一个小项目:涂鸦画板. 功能:绘制各种图形,还可以选取相册上的照片做涂鸦,然后保存到相册中.其中,还包括功能有:颜色的选取.线宽的选取. ...
- IOS 绘制基本图形( 画圆、画线、画圆弧、绘制三角形、绘制四边形)
// 当自定义view第一次显示出来的时候就会调用drawRect方法- (void)drawRect:(CGRect)rect { // 1.获取上下文 CGContextRef ctx = UIG ...
随机推荐
- HDU 3669 Cross the Wall(斜率DP+预处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3669 题目大意:有n(n<=50000)个矩形,每个矩形都有高和宽,你可以在墙上最多挖k个洞使得 ...
- POJ-1681
Painter's Problem Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4839 Accepted: 2350 ...
- Freemarker中JS取Data-model的值的问题
不能在表达式中使用js变量,比如: var key = 1; var value = "${stateMap[key]}"; 因为Freemarker是在服务器端进行解析的,此时j ...
- J2EE MySQL Date数据保持一致解决方案
1.设置MySQL时区,明确指定 MySQL 数据库的时区,不使用引发误解的 CST show variables like '%time_zone%';set global time_zone = ...
- 你想了解的轮询、长轮询和websocket都在这里了
日常生活中,有很多需要数据的实时更新,比如群聊信息的实时更新,还有投票系统的实时刷新等 实现的方式有很多种,比如轮询.长轮询.websocket 轮询 轮询是通过设置页面的刷新频率(设置多长时间自动刷 ...
- hdu 3572(构图+最大流)
Task Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- centos7 安装rlwrap
https://blog.csdn.net/zhjmozhi/article/details/78347216
- ffmpeg测试程序
ffmpeg在编译安装后在源码目录运行make fate可以编译并运行测试程序.如果提示找不到ffmpeg的库用LD_LIBRARY_PATH指定一下库安装的目录.
- CSU 2151 集训难度【多标记线段树】
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2151 Input 第一行三个数n,m,v0 表示有n名萌新和m次调整,初始时全部萌新的集训难度 ...
- 洛谷P1392 取数 [堆]
题目传送门 取数 题目描述 在一个n行m列的数阵中,你须在每一行取一个数(共n个数),并将它们相加得到一个和.对于给定的数阵,请你输出和前k小的取数方法. 输入输出格式 输入格式: 第一行,三个数n, ...