iOSQuartz2D-01-核心要点
简介
- 作用
- 绘制
- 绘制图形 : 线条\三角形\矩形\圆\弧等
- 绘制文字
- 绘制\生成图片(图像)
- 读取\生成PDF
- 截图\裁剪图片
- 自定义UI控件(通常为内部结构较复杂的控件)
- UIKit中的绝大部分控件都是由系统绘制的
- 矩阵操作(使绘制到图形啥下文中的所有路径都发生变化)
- 缩放
- 旋转
- 平移
简介
- Quartz2D隶属于Core Graphic框架,是一个二维的绘图引擎,直接操于Layer(图层),通常在-drawRect:方法中获取上下文,将需要绘制的内容绘制到图形上下文中,然后将图层渲染到控件,最后关闭图形上下文。
- - (void)drawRect:(CGRect)rect,该方法只会界面即将显示的时候调用一次,若要在此调用需要调用重绘方法- (void)setNeedsDisplay
常用的绘制操作
- 绘制直线(三种方法)
- 通过添加路径的方式绘制直线,最后把路径渲染的上下文
- 开启上下文
- CGContextRef context = UIGraphicsGetCurrentContext()
- 描述所要绘制的路径
- 创建路径
CGMutablePathRef CGPathCreateMutable(void) - 设置起点
void CGPathMoveToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y) - 连线
void CGPathAddLineToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y)
- 创建路径
- 将路径添加到上下文
- void CGContextAddPath(CGContextRef context, CGPathRef path)
- 渲染上下文
- void CGContextStrokePath(CGContextRef c)
- 直接在上下文中绘制直线
- 开启上下文
- CGContextRef context = UIGraphicsGetCurrentContext()
- 描述所要绘制的路径
- 设置起点
void CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y) - 连线
void CGContextAddLineToPoint(CGContextRef c, CGFloat x, CGFloat y)
- 设置起点
- 渲染上下文
- void CGContextStrokePath(CGContextRef c)
- 通过贝瑟尔绘制直线
- 常见贝瑟尔路径(最普通的路径)
- (UIBezierPath *)bezierPath
- 设置起点
- (void)moveToPoint:(CGPoint)point
- 连线
- (void)addLineToPoint:(CGPoint)point
- 渲染
- (void)stroke
绘制曲线
- 获取上下文
- CGContextRef UIGraphicsGetCurrentContext(void)
- 绘制路径
- 设置起点
void CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y) - 连线
void CGContextAddQuadCurveToPoint(CGContextRef c, CGFloat cpx, CGFloat cpy, CGFloat x, CGFloat y) - 渲染上下文
void CGContextStrokePath(CGContextRef c)
绘制圆弧(通过贝瑟尔路径)
- 创建贝瑟尔路径
- + (UIBezierPath *)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise
- - (void)stroke
绘制饼状图
- 思路:
1) 饼状图其实是在圆弧的基础上增加了两条线而完成 - 实现步骤
- 通过贝瑟尔路径绘制圆弧
- + (UIBezierPath *)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise
- 添加直线使路径封闭
- 从路径终点到圆弧圆心添加直线
- - (void)addLineToPoint:(CGPoint)point
- 路径起点到圆弧圆心的直线会被自动添加
调用- (void)fill方法是自动添加
- 设置填充颜色
- - (void)set,此方法是UIColor对象的方法,用于设置上下文填充或渲染的颜色
- 填充并封闭路径并渲染
- - (void)fill,通过贝瑟尔路径调用该方法
- 思路:
绘制柱状图
- 思路
1) 通过贝瑟尔路径可以直接绘制柱状图 - 实现步骤
- 创建贝瑟尔路径
- + (UIBezierPath *)bezierPathWithRect:(CGRect)rect
- 设置填充颜色
- - (void)set,此方法是UIColor对象的方法,用于设置上下文中填充或渲染的颜色
- 填充并封闭路径并渲染
- - (void)fill
- 思路
绘制文字
- 思路
- NSString的分类NSStringDrawing实现了将NSString对象的绘制方法
- - (void)drawAtPoint:(CGPoint)point withAttributes:(NSDictionary *)attrs,从某个点开始绘制文字
- - (void)drawInRect:(CGRect)rect withAttributes:(NSDictionary *)attrs,在rect区域内绘制文字
- 在绘制文字是,还可以通过attrs参数设置其属性
- 实现步骤
- 创建NSString对象
- 设置文本属性(其属性不存在一个字典中,通过指定的key去设置相应的属性)
- 设置文本颜色
NSForegroundColorAttributeName - 设置字体
NSFontAttributeName - 设置渲染时的宽度
NSStrokeWidthAttributeName - 设置渲染时的颜色
NSStrokeColorAttributeName - 设置背景属性
NSShadowAttributeName
设置背景颜色:shadowColor(UIColor)
模糊属性:shadowBlurRadius(CGFloat)
偏移量:shadowOffset
- 设置文本颜色
- 绘制文字
- - (void)drawInRect:(CGRect)rect withAttributes:(NSDictionary *)attrs
- - (void)drawAtPoint:(CGPoint)point withAttributes:(NSDictionary *)attrs,若使用该方法,则文字会单行显示
- 绘制图片
- 思路
直接调用UIImage的用于绘制的对象方法即可绘制 - 实现步骤
- 创建UIImage对象
- 创建绘制区域
- 设置超出绘制区域的内容被剪掉
UIRectClip(CGRect rect) - 绘制图片
- - (void)drawAsPatternInRect:(CGRect)rect,平铺的方式显示图片,铺满整个绘制区域(rect)
- - (void)drawAtPoint:(CGPoint)point,显示一张与原来图片大小一样的图片
- - (void)drawInRect:(CGRect)rect,图片被拉伸,大小等于rect
- - (void)drawAtPoint:(CGPoint)point blendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha
- 思路
iOSQuartz2D-01-核心要点的更多相关文章
- dubbo核心要点及下载(dubbo二)
一.dubbo核心要点 1):服务是围绕服务提供方和服务消费方的,服务提供方实现服务,服务消费方调用服务. 2):服务注册 对于服务提供方它需要发布服务,而由于应用系统的复杂性,服务的数量.类型不断的 ...
- [转载] JAVA面试题和项目面试核心要点精华总结(想进大公司必看)
JAVA面试题和项目面试核心要点精华总结(想进大公司必看) JAVA面试题和项目面试核心要点精华总结(想进大公司必看)
- Page Object页面设计模式核心要点
Page Object,页面对象.一种设计模式,实施selenium的最佳实践,体现了web应用与页面显示之间的关系.为什么需要Page Object?测试代码维护的需要:减少代码的编码量,减少代 ...
- Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理
Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明:Java生鲜电商平台中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务 ...
- Spark之RDD容错原理及四大核心要点
一.Spark RDD容错原理 RDD不同的依赖关系导致Spark对不同的依赖关系有不同的处理方式. 对于宽依赖而言,由于宽依赖实质是指父RDD的一个分区会对应一个子RDD的多个分区,在此情况下出现部 ...
- java高并发核心要点|系列文章
java高并发核心要点|系列1|开篇 java高并发核心要点|系列2|锁的底层实现原理 java高并发核心要点|系列3|锁的底层实现原理|ABA问题 java高并发核心要点|系列4|CPU内存指令重排 ...
- Android应用框架中的四个核心要点
Android应用框架中的四个核心要点:活动(Activity).消息(Intent).视图(View).任务(Task) (一)活动Activity Android系统内部有专门的Activity堆 ...
- 高效CSS开发核心要点摘录
做网站的,我们都知道尽量减少请求数,压缩CSS代码量,使用高效CSS选择符等方式可以来提高网站的载入速度和访问速度,也就是优化网站的性能. 下面分析了一些CSS的书写方式,很多都是我们知道并且正在使用 ...
- CoreAnimation-01-CALayer核心要点及实例解析
CALayer基础 CALayer是每一个UI控件的核心,一个UI控件之所以能显示可以说是CALayer的功劳 每一个UI控件默认都为自己创建一个CALayer对象,通过drawRect方法将内容绘制 ...
- OC - 21.CALayer核心要点及实例解析
CALayer基础 CALayer是每一个UI控件的核心,一个UI控件之所以能显示可以说是CALayer的功劳 每一个UI控件默认都为自己创建一个CALayer对象,通过drawRect方法将内容绘制 ...
随机推荐
- 疯狂的ASP.NET系列-第一篇:啥是ASP.NET
最近想学下ASP.NET,于是在网店上看到一本书叫做ASP.NET高级程序设计,老婆在旁边问了句:“这个不是DSP(数字信号处理,大学读的电子,所以这个比较熟),是ASP啊,什么是ASP啊?”.我想了 ...
- java中this关键字
1. 当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中的成员变量.(this是当前对象自己) 如:public class Hello { String s = &q ...
- 终极事务处理(XTP,Hekaton)——万能大招?
在SQL Server 2014里,微软引入了终极事务处理(Extreme Transaction Processing),即大家熟知的Hekaton.我在网上围观了一些文档,写这篇文章,希望可以让大 ...
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)
计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓 ...
- nginx的部署与发布
1.在http://nginx.org/en/download.html下载nginx.tar.gz包. 2.上传发送到服务器(wcp工具) 3.用tar -xf命令解压gz包 4.[配置安装变量]: ...
- js-数据类型
js中有5种数据类型:Undefined.Null.Boolean.Number和String.还有一种复杂的数据类型Object,Object本质是一组无序的名值对组成的. 一.数据类型 1.und ...
- 重构第12天 分解依赖(Break Dependencies)
理解:“分解依赖” 是指对部分不满足我们要求的类和方法进行依赖分解,通过装饰器来达到我们需要的功能. 详解:今天我们所讲的这个重构方法对于单元测试是非常有用的.如果你要在你的代码中加入单元测试但有一部 ...
- 重构第5天:提升字段(Pull Up Field)
理解:提升字段和前面讲解的方法提公很类似,可以说方式都是一样的.就是把继承类中经常用到的字段,提出来 放到基类中,达到通用的目的.提高代码重用性和可维护性. 详解:如下重构前的代码: using Sy ...
- ActiveReports 报表应用教程 (5)---解密电子商务领域首张电子发票的诞生(套打报表)
6月27日京东商城发布了中国电子商务领域首张电子发票,同时宣布相关系统正式上线,这标志着中国电子商务的步伐又向前迈出了重要的一步.目前“电子发票”覆盖的服务范围是在北京地区购买图书.音像商品的个人消费 ...
- 将表数据生成Insert脚本
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo-- =============================================-- Author ...