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方法将内容绘制 ...
随机推荐
- 二项堆(二)之 C++的实现
概要 上一章介绍了二项堆的基本概念,并通过C语言实现了二项堆.本章是二项堆的C++实现. 目录1. 二项树的介绍2. 二项堆的介绍3. 二项堆的基本操作4. 二项堆的C++实现(完整源码)5. 二项堆 ...
- [Python] Magic editor in Pycharm
From: http://blog.csdn.net/u013088062/article/details/50249751 From:http://blog.csdn.net/u013088062/ ...
- 读Avoiding the Disk Bottleneck in the Data Domain Deduplication File System
最近在思考和实践怎样应用重复数据删除技术到云存储服务中.找了些论文来读,其中<Avoiding the Disk Bottleneck in the Data Domain Deduplicat ...
- [python]在场景中理解装饰器
原来我也自己通过查资料,来学习python的装饰器,但是效果不好.因为没有接触过需要用到装饰器的场景,所以 一起的资料都只停留在纸面上,但是今天偶然看到了vimer的这篇文章:http://www.v ...
- [团队项目] Scrum 项目 3.0 SCRUM 流程的步骤2: Spring 计划
SCRUM 流程的步骤2: Spring 计划 1. 确保product backlog井然有序.(参考示例图1) 2. Sprint周期,一个冲刺周期,长度定为两周,本学期还有三个冲刺周期. 3 ...
- 三分 --- POJ 3301 Texas Trip
Texas Trip Problem's Link: http://poj.org/problem?id=3301 Mean: 给定n(n <= 30)个点,求出包含这些点的面积最小的正方形 ...
- 循序渐进开发WinForm项目(1) --数据库设计和项目框架的生成
随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...
- Winform开发框架的业务对象统一调用方式
在这个纷繁的社会里面,统一性的特点能够带来很多高效的产出.牢固的记忆,这种特征无论对于企业.个人的开发工作,知识的传承都有着非常重要的作用,Winfrom框架本身就是基于这个理念而生,从统一的数据库设 ...
- windbg学习进阶之——dump分析常用命令收集
#重要说明 (1) windbg命令分为标准命令,元命令和扩展命令. 标准命令提供最基本的调试功能,不区分大小写.如:bp g dt dv k等 元命令提供标准命令没有提供的功能,也内建在调试 ...
- asp.net.web如何简单生成和保存二维码图片的例子
首先,要有生成二维码图片,需要二维码生成的类库,到官网下载thoughtWorks.QRCode.dll 例子的步骤: 1.创建项目QRCodeTest1,选择asp.net.web窗体应用程序