IOS-Quartz2D(画基本图形)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS-Quartz2D(画基本图形)相关的知识,希望对你有一定的参考价值。

  1 //
  2 //  BWView.m
  3 //  ios_0221_Quartz2D画矩形
  4 //
  5 //  Created by ma c on 16/2/21.
  6 //  Copyright © 2016年 博文科技. All rights reserved.
  7 //
  8 
  9 #import "BWView.h"
 10 
 11 @implementation BWView
 12 /*
 13  一、什么是Quartz2D
 14  1.Quartz2D是一个二维绘图引擎,同时支持IOS和MAC系统
 15  
 16  2.Quartz2D能完成的工作
 17  1>绘制图形:线条\三角形\矩形\圆形\弧
 18  2>绘制文字:
 19  3>绘制\生成图片(图像)
 20  4>读取\生成PDF
 21  5>裁图\裁剪图片
 22  6>自定义UI控件
 23  
 24  3.实例
 25  1>裁剪图片(圆形)
 26  2>涂鸦\画板
 27  3>手势解锁
 28  
 29  4.最重要的价值
 30  1>自定义UI控件:因为有些UI界面及其复杂,而且比较个性化,用普通的UI控件根本无法实现,
 31  此时可以利用Quartz2D技术将控件内部结构画出来。
 32  
 33  5.最重要的概念
 34  1>图形上下文
 35  a.图形上下文(Graghics Context):是一个CGContextRef类型的数据
 36  b.作用:
 37  保留绘图信息,绘图状态
 38  决定绘制的输出目标
 39  绘制好的图形 -> (保存)图形上下文 -> (显示)输出目标
 40  c.相同的一套绘制序列,指定不同的Graghics Context,就可以将相同的图像绘制到不同的
 41  目标上。
 42  
 43  6.Quartz2D提供了以下几种类型的Graghics Context:
 44  1>Bitmap Graphics Context
 45  2>PDF Graphics Context
 46  3>Window Graghics Context
 47  4>Layer Graghics Context
 48  5>Printer Graghics Context
 49  
 50  7.如何利用Quartz2D自定义view
 51  1>新建一个类,继承自UIView
 52  2>实现 -(void)drawRect:(CGRect)rect方法
 53  a.取得跟当前view相关联的图形上下文
 54  b.绘制相应的图形内容
 55  c.利用图形上下文将绘制的所有内容显示到view上面
 56  
 57  8.常识 58  1>绘图顺序:后绘制的图形覆盖前一个图形
 59  2>Quartz2D的API是纯C语言
 60  3>Quartz2D的API来自于Core Graphics框架
 61  4>数据类型和函数基本都以CG作为前缀
 62  
 63  */
 64 
 65 
 66 // Only override drawRect: if you perform custom drawing.
 67 // An empty implementation adversely affects performance during animation.
 68 - (void)drawRect:(CGRect)rect {
 69     
 70     //drawRectangle();
 71     //drawLine();
 72     //drawCircle();
 73     drawArc();
 74     
 75 }
 76 
 77 ///画圆弧
 78 void drawArc()
 79 {
 80     // 1.获得上下文
 81     CGContextRef ctf = UIGraphicsGetCurrentContext();
 82     
 83     // 2.画1/4圆
 84     CGContextMoveToPoint(ctf, 100, 50);
 85     CGContextAddLineToPoint(ctf, 100, 100);
 86     
 87     //画圆弧
 88     /*
 89             x/y:圆心
 90          radius:半径
 91      startAngle:开始角度
 92        endAngle:结束角度
 93       clockwise:圆弧的伸展方向(0:顺时针,1:逆时针)
 94      */
 95     CGContextAddArc(ctf, 100, 50, 50, M_PI_2, M_PI, 0);
 96     
 97     // 关闭路径(连接起点和最后一个点)
 98     CGContextClosePath(ctf);
 99     
100     // 设置颜色
101     [[UIColor redColor] set];
102 
103     // 3.显示
104     CGContextFillPath(ctf);
105 
106 }
107 
108 ///画圆
109 void drawCircle()
110 {
111     // 1.获得上下文
112     CGContextRef ctf = UIGraphicsGetCurrentContext();
113     
114     // 2.画圆
115     CGContextAddEllipseInRect(ctf, CGRectMake(60, 30, 100, 100));
116     
117     // 3.显示
118     CGContextStrokePath(ctf);
119 }
120 
121 ///画线
122 void drawLine()
123 {
124     // 1.获得上下文
125     CGContextRef ctf = UIGraphicsGetCurrentContext();
126     
127     // 2.拼接图形(路径)
128     
129     //画线
130     //设置起点
131     CGContextMoveToPoint(ctf, 10, 10);
132     //添加一条线段到(100,100)
133     CGContextAddLineToPoint(ctf, 100, 100);
134     
135     //设置起点
136     CGContextMoveToPoint(ctf, 100, 50);
137     //添加一条线段到(100,100)
138     CGContextAddLineToPoint(ctf, 200, 100);
139     CGContextAddLineToPoint(ctf, 230, 50);
140     
141     // 设置线宽
142     CGContextSetLineWidth(ctf, 5);
143     // 设置颜色
144     CGContextSetRGBStrokeColor(ctf, 1, 1, 0.1, 1);
145     //设置线段头尾部样式
146     CGContextSetLineCap(ctf, kCGLineCapRound);
147     //设置线段转折点样式
148     CGContextSetLineJoin(ctf, kCGLineJoinRound);
149     
150     // 3.渲染显示到view上面
151     CGContextStrokePath(ctf);
152 }
153 
154 ///画矩形
155 void drawRectangle()
156 {
157     // 1.获得上下文
158     CGContextRef ctf = UIGraphicsGetCurrentContext();
159     
160     // 2.画矩形
161     CGContextAddRect(ctf, CGRectMake(10, 10, 100, 100));
162     
163     // 3.绘制图形
164     //CGContextStrokePath(ctf);
165     CGContextFillPath(ctf);
166 }
167 
168 ///画三角形
169 void drawTriangle()
170 {
171     // 1.获得上下文
172     CGContextRef ctf = UIGraphicsGetCurrentContext();
173     
174     // 2.画三角形
175     CGContextMoveToPoint(ctf, 0, 0);
176     CGContextAddLineToPoint(ctf, 100, 100);
177     CGContextAddLineToPoint(ctf, 150, 80);
178     // 关闭路径(连接起点和最后一个点)
179     CGContextClosePath(ctf);
180     
181     // 3.绘制图形
182     CGContextStrokePath(ctf);
183     
184 }
185 
186 @end

 

以上是关于IOS-Quartz2D(画基本图形)的主要内容,如果未能解决你的问题,请参考以下文章

java GUI Graphics2D 绘图

十一. 图形图像与多媒体4.Graphics类的绘图方法

第3版emWin教程第14章 emWin6.x的2D图形库之基本绘图

使用Java的Graphics类进行绘图的方法详解

canvas

用于 Visual C++ 的简单面向对象的 2D 图形框架?