《Quartz 2D编程指南》电子签名、图片处理(水印、裁剪以及屏幕截图)、常见图形的绘制(饼图、柱状图、雪花、手势密码、画板)

简介: 《Quartz 2D编程指南》电子签名、图片处理(水印、裁剪以及屏幕截图)、常见图形的绘制(饼图、柱状图、雪花、手势密码、画板)

image.png

前言

原文:

https://kunnan.blog.csdn.net/article/details/74121643

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<NSString *,id> *)attrsDraws 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】图形上下文的作用、分类、状态的保持、恢复

https://kunnan.blog.csdn.net/article/details/113057688

III、 Draws the attributed string

  • 《Quartz 2D编程指南》之【Draws the attributed string】字符属性详解、Color-setting functions详解

https://kunnan.blog.csdn.net/article/details/113058061

《Quartz 2D编程指南》之【字符属性详解&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

image.png

从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 常见图形的绘制:手势密码、饼图、柱状图

饼图、柱状图、雪花、手势密码、画板(  电子签名)

https://kunnan.blog.csdn.net/article/details/113043866

V、图片水印、裁剪以及屏幕截图

https://kunnan.blog.csdn.net/article/details/113036525

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.

相关文章
|
JSON JavaScript 数据可视化
D3 不到20行代码就能实现世界地图的绘制
每到农历年末,相信很多小伙伴和本作者一样,都忍不住会去看江苏卫视的一档脑力比拼节目《最强大脑》,尽管上一季最强大脑喷点确实很多,但依旧没有减弱"追剧"的热情。今年最强大脑(第5季)的赛制有很大的变化,挑战的人数从百人大战,到最强30脑,再到现从第三场的一对一PK,确实与以往有了很大的不同。此外,今年更加强调了选手在生活中的光环,例如本文要引用的一场比赛就是最近一期来自清华的孙勇与北京的陈泽坤的一场以地图投影为背景的比赛,孙勇就是顶着2016安徽省高考理科状元的光环来的。今年没了叨叨魏,节目的流程显得自然了很多。好了,不扯了,来、来、来来来!我们开始说本文要讲的主题--地图。
1328 0
D3 不到20行代码就能实现世界地图的绘制
|
3月前
|
前端开发 API 计算机视觉
opencv绘制基本图形,在图片上添加文字
opencv绘制基本图形,在图片上添加文字
|
10月前
31Echarts - 柱状图(特性示例:渐变色 阴影 点击缩放)
31Echarts - 柱状图(特性示例:渐变色 阴影 点击缩放)
71 0
|
10月前
|
定位技术
ArcMap | 出图小技巧——比例尺、鹰眼图、表格、文本、图片
ArcMap | 出图小技巧——比例尺、鹰眼图、表格、文本、图片
250 0
|
C# 图形学
C#绘制自定义小人
C#绘制自定义小人
|
定位技术
Echarts实战案例代码(39):地理坐标整体地图背景色渐变效果和字体随地图缩放的解决方案
Echarts实战案例代码(39):地理坐标整体地图背景色渐变效果和字体随地图缩放的解决方案
255 0
|
存储 JSON 前端开发
【红隼书签】自定义光影、自定义背景、亮度和主题功能
【红隼书签】是一款简洁的在线书签导航网站。
96 1
|
Python 容器
tkinter模块高级操作(二)—— 界面切换效果、立体阴影字效果及gif动图的实现
tkinter模块高级操作(二)—— 界面切换效果、立体阴影字效果及gif动图的实现
225 0
多图显示
多图显示
90 1
多图显示
|
定位技术 数据库
利用 QGIS 绘制洞穴地图
利用 QGIS 绘制洞穴地图
165 0
利用 QGIS 绘制洞穴地图