当我们需要在一个图形上下文中构建一个路径时,我们需要调用CGContextBeginPath来标记Quartz。然后,我们调用函数CGContextMovePoint来设置每一个图形或子路径的起始点。在构建起始点后,我们可以添加直线、弧、曲线。记住如下规则:

  • 在开始绘制路径前,调用函数CGContextBeginPath;
  • 直线、弧、曲线开始于当前点。空路径没有当前点;我们必须调用CGContextMoveToPoint来设置第一个子路径的起始点,或者调用一个便利函数来隐式地完成该任务。
  • 如果要闭合当前子路径,调用函数CGContextClosePath。随后路径将开始一个新的子路径,即使我们不显示设置一个新的起始点。
  • 当绘制弧时,Quartz将在当前点与弧的起始点间绘制一条直线。
  • 添加椭圆和矩形的Quartz程序将在路径中添加新的闭合子路径。
  • 我们必须调用绘制函数来填充或者描边一条路径,因为创建路径时并不会绘制路径。

在绘制路径后,将清空图形上下文。我们也许想保留路径,特别是在绘制复杂场景时,我们需要反复使用。基于此,Quartz提供了两个数据类型来创建可复用路径—CGPathRef和CGMutablePathRef。我们可以调用函数CGPathCreateMutable来创建可变的CGPath对象,并可向该对象添加直线、弧、曲线和矩形。Quartz提供了一个类似于操作图形上下文的CGPath的函数集合。这些路径函数操作CGPath对象,而不是图形上下文。这些函数包括:

  • CGPathCreateMutable,取代CGContextBeginPath
  • CGPathMoveToPoint,取代CGContextMoveToPoint
  • CGPathAddLineToPoint,取代CGContexAddLineToPoint
  • CGPathAddCurveToPoint,取代CGContexAddCurveToPoint
  • CGPathAddEllipseInRect,取代CGContexAddEllipseInRect
  • CGPathAddArc,取代CGContexAddArc
  • CGPathAddRect,取代CGContexAddRect
  • CGPathCloseSubpath,取代CGContexClosePath

如果想要添加一个路径到图形上下文,可以调用CGContextAddPath。路径将保留在图形上下文中,直到Quartz绘制它。我们可以调用CGContextAddPath再次添加路径。

绘制路径

路径描边的函数
Quartz提供了表3-4中的函数来描边当前路径。其中一些是描边矩形及椭圆的便捷函数。
表3-4 描边路径函数

void CGContextSetLineDash

裁减图形上下文的函数

 

混合模式指定了Quartz如何将绘图绘制到背景上。Quartz默认使用普通混合模式(normal blend mode),该模式使用如下公式来计算前景绘图与背景绘图如何混合:

result = (alpha * foreground) + (1 - alpha) *background

“颜色与颜色空间”章节里面详细讨论了颜色值的alpha组件,该组件用于指定颜色的透明度。在本章的例子中,我们可以假设颜色值是完全不透明的(alpha = 0)。对于不透明的颜色值,当我们用普通混合模式时,所有绘制于背景之上的绘图都会遮掩住背景。

我们可以调用函数CGContextSetBlendMode并传递适当的混合模式常量值来设置混合模式来达到我们想到的效果。记住混合模式是图形状态的一部分。如果调用了函数CGContextSaveGState来改变混合模式,则调用函数CGContextRestoreGState来重新设置混合模式为普通混合模式。

kCGBlendModeNormal

kCGBlendModeMultiply

kCGBlendModeScreen

kCGBlendModeOverlay

kCGBlendModeDarken

kCGBlendModeLighten

kCGBlendModeColorDodge

kCGBlendModeColorBurn

kCGBlendModeSoftLight

kCGBlendModeHardLight

kCGBlendModeDifference

kCGBlendModeExclusion

kCGBlendModeHue

kCGBlendModeSaturation

kCGBlendModeColor

kCGBlendModeLuminosity

转载于:https://www.cnblogs.com/chinaxxren/p/3332271.html

Quartz 2D编程笔记相关推荐

  1. iOS 《Quartz 2D编程指南》之【图片裁剪】(包含完整demo源码) :

    文章目录 前言 I.知识储备 1.1 核心步骤 II.例子 2.1 代码 2.2 用法 2.3 demo 仓库地址 前言 效果 I.知识储备 裁剪感兴趣的部分 Modifies the current ...

  2. iOS 《Quartz 2D编程指南》之【图片水印】(包含完整demo源码)

    文章目录 前言 I.知识储备 1.1 核心步骤 II.例子 2.1 代码 2.2 用法 2.3 demo 仓库地址 前言 效果 I.知识储备 核心API @interface NSString(NSS ...

  3. Quartz 2D学习笔记--基础篇

    画一条线: - (void)drawLine {// 1.获取上下文// CGContextRef CG CoreGraphics Ref 引用// 目前学的上下文都跟UIGraphics有关,以后想 ...

  4. Quartz 2D Programming Guide笔记

    ###Graphics Contexts图形上下文### 图形上下文(graphics context)是绘制目标,可以理解为画布,包含着绘图时的参数和设备信息.类型为CGContextRef.获取g ...

  5. iPhone开发笔记[1/50]:初学iPhone上用Quartz 2D画图

    参考了An iOS 4 iPhone Graphics Drawing Tutorial using Quartz 2D这篇文章,用了30分钟在iPhone上画出了一条直线,核心代码全在drawRec ...

  6. 绘图与滤镜全面解析--Quartz 2D 、Core Image

    绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2 ...

  7. linux常见命令以及shell入门编程(笔记总结记录)

    linux常见命令以及shell入门编程(笔记总结记录) 文章目录 linux常见命令以及shell入门编程(笔记总结记录) 一.linux常见命令 1.不常用 2.常用 3.数据查找处理相关 1.g ...

  8. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  9. iOS 2D绘图详解(Quartz 2D)之概述

    原创Blog,转载请注明出处  http://blog.csdn.net/hello_hwc?viewmode=list 前言:最近在研究自定义控件,由于想要彻底的定制控件的视图还是要继承UIView ...

最新文章

  1. python3中文手册-Python3.4中文手册 chm版
  2. 【总结整理】《人人都是产品经理》---读后感
  3. 心电信号去噪(part4)--经验模态分解法(EMD)
  4. java如何加载lambda_Java 8 lambda表达式引入及简单使用
  5. smarty模板引擎
  6. 小学计算机课程报告怎么写,小学计算机课论文摘要怎么写 小学计算机课论文摘要范文参考...
  7. Python 之 获取Host Esxi 主机信息
  8. 继“段友”之后,抖音也慌了?
  9. leapmotion 运行出错,看不到手势
  10. 微机综合保护装置怎么选择?在高压柜中起什么作用?
  11. silvaco用户手册学习1——Getting Started with Atlas
  12. Android 不透明度 对应表
  13. Android Studio模拟器安装步骤
  14. 烽火2640路由器命令行手册-01-基础配置命令
  15. GTX1050Ti和GTX1060显卡哪个好?
  16. CSSCSS3基础教程
  17. 张益唐被曝已证明黎曼猜想相关问题,震动数学界
  18. 《安富莱嵌入式周报》第223期:2021.07.26--2021.08.01
  19. 安装mysql 配置环境变量
  20. 【安全资讯】个人信息保护新规将出台 消费者被短信轰炸将成为历史

热门文章

  1. C:01---数据类型与ASCII
  2. 算法题 如何找到数组中重复的数字
  3. C++boost Class named_condition翻译
  4. C++ primer第十八章 18.1小结 异常处理
  5. C++ primer第六章6.7函数指针
  6. 区块链中的密码学,使用ABE结合区块链
  7. GitHub政府用户破万:开源成重塑政府新手段
  8. OpenCL(CUDA5.0) + Visual Studio 2010 环境配置
  9. 京东商城上市带来的利与益
  10. 手机音视频应用开发(专注于Symbian、iPhone、Android等跨平台音视频应用开发方案)