iOS:quartz2D绘图(绘制渐变图形)
2024-09-04 15:41:12
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);
}
绘制的径向渐变图形截图为:
最新文章
- 记录在windows7上安装MongoDB
- TestLink学习八:TestLink1.9.13与Mantis1.2.19集成
- phaser运用中,dota战术板
- centos nginx install openssl
- Oracle临时表on commit preserver rows和on commit delete rows区别
- 杭电 2029 Palindromes _easy version
- SharePoint 入门书籍推荐 转载来源http://www.cnblogs.com/jianyus/p/3513238.html
- SpannableString 给TextView添加不同的显示样式
- LeetCode(65)-Power of Four
- [Swift]LeetCode713. 乘积小于K的子数组 | Subarray Product Less Than K
- no plugin found for prefix &#39;tomcat 7&#39; in the current project
- Codeforces 1045G AI robots [CDQ分治]
- PTA之多项式求值
- HashMap相关总结
- Struts2重新学习2之struts2和struts1的区别
- 传统三层架构与DDD分层架构
- MSSQL 详解SQL Server连接(内连接、外连接、交叉连接)
- REST理解
- 【NLP汉语自然语言处理与实践】分词_笔记
- yii2.0里自己写的源码上传图片
热门文章
- javaScript存储
- Djangp2.x版本报错找不到模版目录下的文件
- SPOJ - PHRASES K - Relevant Phrases of Annihilation
- 戴尔笔记本Inspiron 7560(灵越) 加装固态硬盘从选购固态硬盘到系统迁移到设置SSD为第一启动(受不了了,网上的教程就没有完整的)
- 203. Remove Linked List Elements【Easy】【未排序链表删除其中的给定值】
- Struts2自定义转换器输入生日日期输出年、月、日、年龄
- Python开发基础-Day16import模块导入和包的调用
- (hdu1007)Quoit Design,求最近点对
- Codeforces 550 D. Regular Bridge
- python基础之序列化 time random os