简介


  • 作用

    • 绘制
    • 绘制图形 : 线条\三角形\矩形\圆\弧等
    • 绘制文字
    • 绘制\生成图片(图像)
    • 读取\生成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

---恢复内容结束---

简介


  • 作用

    • 绘制
    • 绘制图形 : 线条\三角形\矩形\圆\弧等
    • 绘制文字
    • 绘制\生成图片(图像)
    • 读取\生成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

OC - 8.Quartz2D核心要点的更多相关文章

  1. OC - 21.CALayer核心要点及实例解析

    CALayer基础 CALayer是每一个UI控件的核心,一个UI控件之所以能显示可以说是CALayer的功劳 每一个UI控件默认都为自己创建一个CALayer对象,通过drawRect方法将内容绘制 ...

  2. dubbo核心要点及下载(dubbo二)

    一.dubbo核心要点 1):服务是围绕服务提供方和服务消费方的,服务提供方实现服务,服务消费方调用服务. 2):服务注册 对于服务提供方它需要发布服务,而由于应用系统的复杂性,服务的数量.类型不断的 ...

  3. [转载] JAVA面试题和项目面试核心要点精华总结(想进大公司必看)

    JAVA面试题和项目面试核心要点精华总结(想进大公司必看) JAVA面试题和项目面试核心要点精华总结(想进大公司必看)

  4. Page Object页面设计模式核心要点

      Page Object,页面对象.一种设计模式,实施selenium的最佳实践,体现了web应用与页面显示之间的关系.为什么需要Page Object?测试代码维护的需要:减少代码的编码量,减少代 ...

  5. Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理

    Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明:Java生鲜电商平台中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务 ...

  6. Spark之RDD容错原理及四大核心要点

    一.Spark RDD容错原理 RDD不同的依赖关系导致Spark对不同的依赖关系有不同的处理方式. 对于宽依赖而言,由于宽依赖实质是指父RDD的一个分区会对应一个子RDD的多个分区,在此情况下出现部 ...

  7. java高并发核心要点|系列文章

    java高并发核心要点|系列1|开篇 java高并发核心要点|系列2|锁的底层实现原理 java高并发核心要点|系列3|锁的底层实现原理|ABA问题 java高并发核心要点|系列4|CPU内存指令重排 ...

  8. Android应用框架中的四个核心要点

    Android应用框架中的四个核心要点:活动(Activity).消息(Intent).视图(View).任务(Task) (一)活动Activity Android系统内部有专门的Activity堆 ...

  9. 高效CSS开发核心要点摘录

    做网站的,我们都知道尽量减少请求数,压缩CSS代码量,使用高效CSS选择符等方式可以来提高网站的载入速度和访问速度,也就是优化网站的性能. 下面分析了一些CSS的书写方式,很多都是我们知道并且正在使用 ...

随机推荐

  1. iPhone 崩溃日志解析

    方法一.在编译时保留xx.app, xx.app.dSYM在/user目录下,xcode->orgernize->Device Logs就能够自动部分定位地址 方法二.xcode 有自带的 ...

  2. Java笔记(二十九)……网络编程

    概述 网络模型 网络通讯的要素 ip地址:网络中设备的标识符 端口:用于标识同一台设备上不同的进程,有效端口:0~65535,其中0~1024是系统使用端口或者保留端口 TCP与UDP UDP特点: ...

  3. Html笔记(六)超链接

    超链接标签: <a> 两种用法: 一.超链接 <a href=""> 例: <a href="http://www.sina.com.cn& ...

  4. HW5.4

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  5. Mozilla NPAPI开发示例之一(VS2012 + Win7(64位))

    入门级的NPAPI开发. NPAPI & NPRuntime 简介 Netscape Plugin Application Programming Interface (NPAPI) NPAP ...

  6. em与px之间的换算

    任意浏览器的默认字体高度16px(16像素).所有未经调整的浏览器都符合:1em=16px.那么12px=0.75em,10px=0.625em.为了简化font-size的换算,需要在css中的bo ...

  7. SimpleDateFormat 转化毫秒到日期时,指定特定的时区

    http://blog.csdn.net/wangpeng047/article/details/8560690 影响TimeZone的因素: 1. 操作系统的时区设置. 2. 数据传输时时区设置. ...

  8. 走进C++程序世界-----继承和派生(2)

    覆盖基类的函数 覆盖基类函数顾名思义就是在派生类中对基类的函数进行的重新定义.这里将会讲到下面的2个知识点: 1.隐藏基类的方法 2.调用基类的方法(隐式和显示调用基类的方法) /* *derive2 ...

  9. PetShop 4.0学习笔记:消息队列MSMQ

    直到今天才知道,在我们每天都在用的Window系统里还有这么好用的一个编程组件:消息队列.它能够解决在大数据量交换的情况下的性能问题,特别是BS系统的数据库性能.而且它的异步处理方式能给程序员最大的便 ...

  10. 一个不喜欢读书的Javaer的读书单

    很可惜,从我一开始学技术开始,我就不喜欢看书,严重的时候翻不到两页就会开始狂打瞌睡.很幸运,有互联网能够为我提供很多知识,甚至一些知识从网上看来的会更加权威一些.但是,我的经验告诉我,无论是从功利性的 ...