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 ...
随机推荐
- leetcode 之Candy(12)
这题的思路很巧妙,分两遍扫描,将元素分别和左右元素相比较. int candy(vector<int> &rattings) { int n = rattings.size(); ...
- Java单线程多实例和多线程多实例
最近写了一个程序,是采用多线程往redis里面写入数据,想统计一下一共写了多少条数据,于是用了一个static的全局变量count来累加,这块代码抽象出来就是这样的: public class Mul ...
- 【python】时间戳、字典列表排序
记录一下昨天学到的知识: 一.文件相关 文件追加:f = open("fname","a") 文件不存在时创建 二.时间戳相关 http://www.jb ...
- opencv 图像转换
#include <cv.h> #include <highgui.h> int main() { CvPoint2D32f srcTri[], dstTri[]; CvMat ...
- jpa缓存导致无法查询到更新后的数据&android出现ANR的一个解决办法
1. 向服务器更新记录后查询,始终查询不到更新后的信息 只能查到更新之前的,马上推断出是缓存的问题.网上搜索一番,将问题定位为jpa缓存,我们要设置jpa查询时不从缓存中取,直接从数据库中取,这样便能 ...
- Go语言表组测试示例
比基本测试多个循环... package main import ( "testing" "net/http" ) const checkMark = &quo ...
- Go语言基础单元测试示例
这个要熟悉原理,要能写.. 但现在..... 注意,没有main函数,以_test.go结尾,命令go test -v package main import ( "testing" ...
- vue小荔枝,时间控件,动态按月份增减。
依赖框架有jq,bootstrap3.0,vue2.0; 自封装(搬运)时间控件,bootstrap-datetimepicker.资源下载:看这里 需求: 默认本地时间,相隔一个月 四个选项:1一个 ...
- 《深入理解Android2》读书笔记(一)
2017-5-12 从今天开始估计有一段空闲时间,开始阅读<深入理解Android2>,并写读书笔记. 第一章搭建环境直接略过. 第二章是Binder,暂时略过 7大类服务包括:1.And ...
- 【转载】TabLayout 源码解析
原文地址:https://github.com/Aspsine/AndroidSdkSourceAnalysis/blob/master/article/TabLayout%E6%BA%90%E7%A ...