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 ...
随机推荐
- 关于ueditor在Java中文件上传问题,404问题
问题困扰了两天,部署要求导入到webcontent下,我导入到了整个项目目录下,自己粗心犯错,导致页面访问不到404. 解决了上面的问题,试着进行文件上传,却一直找不到图片: 调出浏览器控制台: 刚开 ...
- UVA - 796
UVA- 796 /** 题意:给出一个图,然后看此图的存在的桥,并且输出是哪一个, 做法:Tarjan(不存在重边) **/ #include<iostream> #include< ...
- Django web框架之权限管理二
1. login登录 def login(request): if request.method=="GET": return render(request,'login.html ...
- Linux文件系统中/tmp的临时文件清理说明
https://www.cnblogs.com/MonkeyAC/articles/3631401.html
- AC日记——色板游戏 洛谷 P1558
色板游戏 思路: sb题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 struct Tre ...
- vue小荔枝,时间控件,动态按月份增减。
依赖框架有jq,bootstrap3.0,vue2.0; 自封装(搬运)时间控件,bootstrap-datetimepicker.资源下载:看这里 需求: 默认本地时间,相隔一个月 四个选项:1一个 ...
- canvas时钟效果
话不多说,直接上代码 <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/x ...
- Codeforces 1099 A. Snowball-暴力(Codeforces Round #530 (Div. 2))
A. Snowball time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- HDU 1829 A Bug's Life 【带权并查集/补集法/向量法】
Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes ...
- jdbc 回顾
JDBC实现基本的CRUD示例 private static void insertTest() throws SQLException { String dbURL = "jdbc:mys ...