00-UIGraphics

Quartz 2D的概述

Quartz 2D是一个二维绘图引擎,同时支持 ios 和 Mac系统。Quartz 2D的应用范围:

  • 绘制图形:线条、三角形、矩形、圆、弧等;
  • 绘制文字
  • 绘制\生成图片(图像)
  • 读取\生成PDF
  • 截图\裁剪图片
  • 自定义UI控件

Quartz 2D 在ios开发中的价值

为了便于搭建美观的UI界面,ios提供了UIKit框架,里面有各种各样的UI控件,例如UILabel、UIImageView、UIButton等;
利用UIKit框架提供的空间,拼拼凑凑,能搭建和实现一些简单、常见的UI界面。但是,有些UI界面极其复杂,而且比较个性化,用普通的UI空间无法实现,这是可以利用Quartz 2D技术将控件内部的结构画出来,自定义控件的样子。
其实,ios中大部分控件的内容都是通过Quartz 2D画出来的。

图形上下文

图形上下文是一个CGContextRef类型的数据,其作用就是:

保存绘图信息 和 绘图状态
决定绘制的输出目标(绘制到什么地方去?)
输出目标可以是PDF文件、Bitmap或者显示器的窗口上
相同的一套绘制序列,指定不同的Graphics Context,就可以将相同的图像绘制到不同的目标上
在这里插入图片描述
Quartz 2D提供以下几种类型的Graphics Context
在这里插入图片描述

自定义View

如何利用Quartz 2D 绘制东西到view上?

首先,需要先获取图形上下文,因为它能保存绘图信息,并且决定着绘制到什么地方去
其次,获取的图形上下文,必须跟view相关联,才能将内容绘制到view上面。

自定义view的步骤

新建一个类,继承自UIView
实现- (void)drawRect:(CGRect)rect方法,然后在这个方法中:
(1)取得跟当前view相关联的图形上下文
(2)绘制相关的图形内容
(3)利用图形上下文将绘制的所有内容渲染显示到view上面

- (void)drawRect:(CGRect)rect注意点

  • (void)drawRect:(CGRect)rect 这个方法比较独特的地方是,当系统自动调用这个方法时,会在drawRect内部自动创建跟view相关联的上下文
    当开发者手动调用的时候,是不会创建上下文的!!
    我们如果需要调用drawRect方法去绘制的时候,可以用[self setNeedIfDisplay]这个方法来代替。

图形上下文的结构

图形上下文可以如果要把路径绘制到页面上时,我们可以调用如下的代码:

CGContextStrokePath(CGContextRef cg_nullable c)

这句代码的意思是:

取出上下文当中所有绘制的路径
把上下文当中的状态应用到所有路径当中
绘制指定的图形上下文中

因此,我们就需要了解一下图形上下文的结构:

  • 当我们获取图形上下文的时候,内存开启了一个上下文的空间,空间有两个区域:路径区域(用来存取添加的路径)状态区域(用来描述路径的状态的区域)
  • 当我们调用CGContextStokePath的时候,会先从路径区域中取出所有的路径,然后把状态区域里面的状态都添加都所有的路径上,最后再绘制到页面中。
  • 在这里插入图片描述
    当然系统还提供了保存上下文状态栈的代码,如下图:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值