前言
原文:
Everything you can draw using Cocoa can also be drawn using Quartz.
Cocoa绘图代码本身使用Quartz来呈现内容。Cocoa只是添加了一个面向对象的接口,然而,Cocoa并没有为所有的Quartz行为提供类。在Cocoa中没有功能的情况下,可直接使用Quartz。
- Some of the Quartz features that are not supported directly by Cocoa include the following:
1、Layers
2、Gradients (also called shadings)
3、Image data sources
4、Blend modes (Cocoa uses compositing modes instead)
5、Masking images
6、Transparency layers (for grouping content)
7、Arbitrary patterns (other than images)
划重点: 1、什么是quartz 2D?
quartz 2D在iOS开发中的价值 quartz 2D能完成的工作 quartz 2D绘图的基础元素:路径 quartz 2D的内存管理
2、图形上下文
1)图形上下文的作用:保持绘图的信息、决定绘图的输出目标
2)状态的保持、恢复
3)绘图状态的设置:文字颜色、线宽
3、Draws the attributed string
1)在坐标中画出文字:
- (void)drawInRect:(CGRect)rect withAttributes:(NSDictionary *)attrs
Draws the attributed string inside the specified bounding rectangle.2)在point点开始画文字:
drawAtPoint:withAttributes:
[string drawAtPoint: CGPointMake(100, 100) withAttributes: stringAttributes];
4、Draws the entire image
在坐标中画出图片:
- (void)drawRect:(CGRect)rect;
保持图片大小在point点开始画图片[image drawAtPoint:CGPointMake(100, 340)];
常见图形的绘制:饼图、柱状图、雪花、手势密码、画板( 电子签名)
5、矩阵操作
6、图片处理
水印、裁剪以及屏幕的截图
I 什么是quartz 2D?
- Overview of Cocoa Drawing
1、Path-based drawing (also known as vector-based drawing)
2、Image creation, loading and display
3、Text layout and display
4、PDF creation and display
5、Transparency
6、Shadows
7、Color management
8、Transforms
9、Printing support
10、Anti-aliased rendering
11、OpenGL support
quartz 2D是一个二维绘图引擎,同时支持iOS、tvOS、macOS
Quartz 2D provides low-level, lightweight 2D rendering with unmatched output fidelity regardless of display or printing device.
1.1、quartz 2D能完成的工作
1》绘制图形、文字
2》绘制、生成图片(图像)
3》读取、生成PDF文件
4》图片的裁截:圆形裁剪
5》自定义控件
1.2、quartz 2D在iOS开发中的价值
当使用uikit框架的普通控件无法实现需求的时候,可采用quartz 2D技术将控件内部的结构画出来 ,自定义UI控件的样子
1.3、 quartz 2D须知
1)quartz 2D的API是纯C语言的
2)quartz 2D的API来自于Core Graphics框架
3)数据类型和函数基本都以CG作为前缀:CGContextRef、CGPathRef、CGContextStrokePath(ctx);
1.4、 quartz 2D绘图的基础元素:路径
1)路径定义了一条或者或多条形状或子路径
2)子路径可以包含一条或者多条直线或曲线
3)子路径也可以是一些简单的形状,例如线、圆形、矩形或者星型等
4)子路径还可以包含复杂的形状,例如地图轮廓或者涂鸦等
5)路径可以是开放的,也可以是封闭的
6)路径主要使用在定义视图运动轨迹
1.4、quartz 2D 的内存管理
1、如果含有create、copy的函数创建对象,使用完之后必须释放,否则将导致内测泄露
2、如果retain了一个对象,不在使用时需将其release掉
可以使用quart 2D的函数(e g. CGColorSpaceRetain)来指定retain\release一个对象,或者使用core foundation 的CFRetain.
II 、图形上下文(graphics context)
- 《Quartz 2D编程指南》之【graphics context】图形上下文的作用、分类、状态的保持、恢复
III、 Draws the attributed string
- 《Quartz 2D编程指南》之【Draws the attributed string】字符属性详解、Color-setting functions详解
IV、 Draws the entire image
4.1 iOS Quartz2D使用教程之【自定义控件】(横屏电子签名)
- iOS Quartz2D使用教程之【自定义控件】(案例:横屏电子签名)
https://kunnan.blog.csdn.net/article/details/113032551iOS横屏电子签名上篇【核心原理: 旋转特定的屏幕&Quartz2D】应用场景:采集电子签名iOS横屏电子签名下篇(内含demo源码)【核心原理: 只旋转特定的屏幕& Quartz2D】开发过程遇到的问题及解决方案
4.2 抽奖转盘
iOS抽奖转盘:概率抽奖算法 & 转盘算法 & 转盘主视图的实现思路 (从CSDN下载完整Demo)
https://kunnan.blog.csdn.net/article/details/115653905
从CSDN下载demo: https://download.csdn.net/download/u011018979/16651799
文章:https://kunnan.blog.csdn.net/article/details/115653905原理:利用CoreGraphics进行自定义转盘的绘制 视频:https://live.csdn.net/v/158749private : https://github.com/zhangkn/TurntableV
4.3 常见图形的绘制:手势密码、饼图、柱状图
饼图、柱状图、雪花、手势密码、画板( 电子签名)
V、图片水印、裁剪以及屏幕截图
see also
- Introduction to String Programming Guide
- Introduction to Attributed String Programming Guide
- Cocoa Drawing Guide:text
#公众号:iOS逆向CSDN认证博客专家 Swift SwiftUI Objective-C
微信公众号:【iOS逆向】
iOS逆向与安全,熟悉iphone/tweak、iphone/tool、cydia的repo 制作 、cocoapods的Specs repo制作(using-pod-lib-create、private-cocoapods)。
I am a software engineer currently living in Changsha. My interests range from technology to writing.