美文网首页
iOS CoreGraphics Quartz 2D

iOS CoreGraphics Quartz 2D

作者: 转身是天涯 | 来源:发表于2018-08-30 23:36 被阅读0次

            当一个视图View显示在屏幕上时,其展现给用户的样式都是经过绘 图后显示在屏幕上的。例如,UILabel控件能够在控件所在矩形区域的中间/左侧/右侧显示文字,UIImageView可以显示一张图片,UIButton 可以显示图片+文字,这些控件最终展示的效果其实都是经过绘图后才 显示出来的,而绘图的过程可以由程序员自行控制,正因为此,我们可以去控制绘图的过程,从而可以使视图展示不同的效果。这需要我们去学习CoreGraphics框架。

            CoreGraphics中最关键的部分是一个名为Quartz 2D的API集合,它包含了各种函数、数据类型以及对象,能够让大家在内存中直接绘制视图和图像。

            在使用CoreGraphics框架时,需要提前了解在绘图过程中涉及的几个重要概念:

    画纸(page):Quartz 2D将正在进行绘制的视图视作一个虚拟的画布,在画布上用画笔画画,就必须遵循一定的规则,例如,绘制的内容是有先后顺序的,如下图所示。

    绘制顺序

    路径(Path):当你拿到一只画笔时,那么就能够随心所欲的在画纸上绘画,画笔移动的轨迹就是路径。在UIKit框架中,有一个 称为贝塞尔路径(UIBezierPath)的类专门用来设置各种样式的路径对象。

    绘图上下文(Graphics Context):绘图上下文,有时也称为绘图环境 ,绘图上下文中会保存绘图的信息和状态,并负责将图形绘制在视图上,即绘图的输出终端(Drawing Destination),Quartz提供了5种绘图的输出目标,如下图所示。例如,可以输出到窗口屏幕window,也可以输出到打印机printer,也可以保存为文件PDF等。我们在开发中最经常使用的是layer。

    绘图输出目标

            Quartz坐标变换: 不同的绘图系统对坐标系的定义有所区别.在iOS中Quartz坐标系和UIKi

    t坐标系有所不同, 具体来说:

    Quartz 2D坐标系: 原点在左下角, x向右为正, y向上为正;UIKit坐标系: 原点在左上角, x向右为正, y向下为正;

    • 平移变换

            平移是一物体从一个位置到另一个位置所做的直线移动. 如果要把一 个位于P(x,y)的点移到新位置p’(x’,y’)时, 只要在原坐标加上平移距离T x及Ty即可.

    • 缩放变换

            用来改变一物体大小的变换称为缩放变换. 如果要对一个多边形进行 比例变换, 那么可把各顶点的坐标(x,y)均乘以比例因子Sx、Sy可以相 等或不等. 如果比例因子数值小于1, 则物体尺寸减小; 大于1, 则使物体 放大; Sx及Sy都等于1,则物体大小形状不变.

    • 旋转变换

            物体上的各点绕一固定点沿圆周路径转动称为旋转变换. 可以用旋转 角表示旋转量的大小. 一个点由位置(x,y)旋转到(x’,y’), 从水平轴到(x’,y’)的角度即为旋转角.

    • 反射变换

            反射是用来产生物体的镜像的一种变换. 物体的镜像一般是相对于一 个对称轴产生的, 因此反射变换可以分为x轴对称变换、y轴对称变换 和坐标原点的对称变换.

    Swift Demo: Quartz Fun

    示例

    • 1.在QuartzFunView中创建随机颜色,定义颜色和形状的枚举

    • 2.实现QuartzFunView的框架,定义相关属性。

    • 3.之后再添加三个能够响应用户触摸时间的方法

    用户手指首次触摸屏幕时调用。存储当前坐标,然后调用setNeedDisplay方法将视图标记为需要重新绘制的。

    用户手指持续拖动时持续调用。每次都在lastTouchLocation中存储最新的当前位置。

    用户手指离开屏幕时调用。在lastTouchLocation变量中存储最终的位置并将视图标记为需要重新绘制。

    • 4.向VIewController中添加输出接口和操作方法

    • 5.添加绘制代码 获得上下文与当前绘制范围

    相关文章

      网友评论

          本文标题:iOS CoreGraphics Quartz 2D

          本文链接:https://www.haomeiwen.com/subject/eeysixtx.html